我正在尝试使用 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��
散列的散装正确,但结果由字节数组组成。为了使其可读,请使用StringBuffer
。作为转换的示例,请在Mkyong的网页上查看示例。
StringBuffer sb = new StringBuffer();
for (int i = 0; i < sha256Result.length; i++) {
sb.append(Integer.toString((sha256Result[i] & 0xff) + 0x100, 16).substring(1));
}
我认为您的哈希是可以的。如果您希望它作为十六进制字符串:
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
String hex = (new HexBinaryAdapter()).marshal(md.digest(password.getBytes(StandardCharsets.UTF_8)));