java-在我的加密字符串上追加新行

在主要:

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==
:

注意:在我的加密字符串上追加了新行。

应用代码:

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;
}

我如何删除多余的新行。为什么会这样,请帮助我是什么原因?

Rajesh Narravula asked 2020-06-30T06:28:47Z
5个解决方案
158 votes

我回答这个问题可能很晚,但是遇到了同样的问题。 其实问题就在这里Base64.encodeBase64String(hashPassword,Base64.NO_WRAP)

更改该行,使其看起来像这样:Base64.encodeBase64String(hashPassword,Base64.NO_WRAP)

默认情况下,Android Base64 util在编码字符串的末尾添加换行符。Base64.NO_WRAP标志告诉util创建不含换行符的编码字符串。

在这里检查

Dory answered 2020-06-30T06:29:18Z
3 votes

用:

String encryPass = Base64.encodeBase64String(hashPassword).trim();
answered 2020-06-30T06:29:38Z
2 votes

无需修剪的清洁选项:

String encryPass = BaseEncoding.base64().encode(hashPassword);
tashuhka answered 2020-06-30T06:29:58Z
0 votes

这取决于org.apache.commons.codec.binary.Base64的实现。那是什么方法?

如果它来自Apache Commons,请注意,有几个不同的类对空白的处理方式不同。

例如,输出org.apache.commons.codec.binary.Base64块,可能会将CR-LF序列添加到最终块。

较常见的版本org.apache.commons.codec.binary.Base64不添加空格。

erickson answered 2020-06-30T06:30:31Z
0 votes

如果使用OkHttp的任何库都需要此文件,则可以使用Credentials类将Base64编码为用户名/密码

String credentials = Credentials.basic("username", "password");

request.header(HttpHeaders.AUTHORIZATION, credentials);
sea cat answered 2020-06-30T06:30:51Z
translate from https://stackoverflow.com:/questions/20040539/new-line-appending-on-my-encrypted-string