【问题标题】:Wrong result after hasing string with SHA-256 [duplicate]使用 SHA-256 获得字符串后的错误结果 [重复]
【发布时间】: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);

结果字符串:

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

【问题讨论】:

  • 返回的数组是散列的原始字节,如果你想要它是十六进制的,你应该检查this question

标签: java android string character-encoding sha256


【解决方案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)));
    

    【讨论】:

      猜你喜欢
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 2016-08-03
      • 2021-10-10
      • 2012-11-19
      • 2017-11-23
      相关资源
      最近更新 更多