使用 SHA-256 获得字符串后的错误结果 [重复]

Posted

技术标签:

【中文标题】使用 SHA-256 获得字符串后的错误结果 [重复]【英文标题】:Wrong result after hasing string with SHA-256 [duplicate] 【发布时间】:2018-03-11 07:57:39 【问题描述】:

我正在尝试使用 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);

结果字符串:

��Ё�Le�/��Z���O+�,�]l��

【问题讨论】:

返回的数组是散列的原始字节,如果你想要它是十六进制的,你应该检查this question。 【参考方案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));

【讨论】:

【参考方案2】:

我认为你散列它的方式没问题。如果你想要它作为一个十六进制字符串之后:

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

【讨论】:

以上是关于使用 SHA-256 获得字符串后的错误结果 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Crypto++ 生成 SHA256 哈希,使用字符串作为输入和输出?

BigQuery SHA256功能

根据我之前是不是打印出切片,在附加切片后计算 sha256 会给出不同的结果

在Python中使用SHA256对字节字符串进行签名

Lua SHA256 库

分两步创建 SHA256withRSA