新的行附加在我的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不会添加空格。