使用SHA-256使用字符串后错误的结果

时间:2017-09-29 11:59:00

标签: java android string character-encoding sha256

我正在尝试使用SHA-256散列字符串,但结果错误并包含特殊字符。

代码:

String password = "test";
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] sha256Result = md.digest(password.getBytes(StandardCharsets.UTF_8));
String result = new String(sha256Result, StandardCharsets.UTF_8);

结果字符串:

��Ё�L}e�/��Z���O+�,�]l��

2 个答案:

答案 0 :(得分:1)

哈希正确处理,但结果由字节数组成。要使其可读,请使用StringBuffer。作为转换的示例,请查看example on Mkyong's webpage

StringBuffer sb = new StringBuffer();
    for (int i = 0; i < sha256Result.length; i++) {
    sb.append(Integer.toString((sha256Result[i] & 0xff) + 0x100, 16).substring(1));
}

答案 1 :(得分:1)

我认为你散列它的方式是可以的。如果你想在以下之后将其作为十六进制字符串:

import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
String hex = (new HexBinaryAdapter()).marshal(md.digest(password.getBytes(StandardCharsets.UTF_8)));