新的行附加在我的encryptionstring
主要:
public static void main(String[] args) throws NoSuchAlgorithmException { System.out.println("encrypt:" + encryptPassword("superuser")+":" ); } public static String encryptPassword(final String password) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] hashPassword = md.digest(password.getBytes()); String encryPass = Base64.encodeBase64String(hashPassword); return encryPass; }
我得到这个输出:
encrypt:C66i8K4gFQ23j1jN2sRCqQ==:
但是,当我在我的应用程序中实现相同的东西,我得到的输出如下:
encrypt:C66i8K4gFQ23j1jN2sRCqQ== :
注意:新行附加在我的encryptionstring上。
申请代码:
public boolean authenticateUsernamePasswordInternal(UsernamePasswordCredentials credentials) { try { System.out.println("encrypt:" + getHash("superuser")+":" ); } catch (Exception e) { logger.error(e.getMessage(), e); throw new BadCredentialsAuthenticationException(ErrorConstants.CONNECTION_FAILED); } } private String getHash(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{ MessageDigest md = MessageDigest.getInstance("MD5"); byte[] hashPassword = md.digest(password.getBytes()); String encryPass = Base64.encodeBase64String(hashPassword); return encryPass; }
我如何删除多余的新行。 为什么发生这种情况,请帮帮我是什么原因?
我可能会迟到回答这个问题,但遇到同样的问题。 其实问题出在这里Base64.encodeBase64String(hashPassword)
更改该行看起来像这样它应该工作: Base64.encodeBase64String(hashPassword,Base64.NO_WRAP)
默认情况下,Android Base64 util会在编码string的末尾添加换行符。 Base64.NO_WRAP标志告诉util创build没有换行符的编码string。
在这里检查
使用:
String encryPass = Base64.encodeBase64String(hashPassword).trim();
没有修剪的清洁选项:
String encryPass = BaseEncoding.base64().encode(hashPassword);
这取决于Base64.encodeBase64String()
的实现。 那是什么方法?
如果它来自Apache公共区域,请注意,有几个不同的类以不同的方式处理空白。
例如, org.apache.commons.net.util.Base64
块输出,它可能会添加一个CR-LF序列到最后的块。
更常见的版本org.apache.commons.codec.binary.Base64
不会添加空格。