【问题标题】:How to hash a string using SHA-256如何使用 SHA-256 对字符串进行哈希处理
【发布时间】:2014-05-13 03:23:30
【问题描述】:

我正在尝试使用 SHA-256 对字符串类型的用户密码进行哈希处理

我正在使用 SHA-256 使用以下 method 对字符串进行哈希处理

String text = "abc";
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes("UTF-8"));

为了将 btye 数组转换为字符串,我使用了以下method

String doc2 = new String(hash, "UTF-8");

当我将 doc2 打印到输出时,我得到了垃圾

�x����AA@�]�"#�a��z���a�

我做错了什么???如何使用 SHA-256 对字符串进行哈希处理并将其转换回字符串??

【问题讨论】:

  • 散列是一种单向函数。如果您打算尝试从哈希中取回密码,那是不可能的。

标签: java string hash sha256


【解决方案1】:

这将触发哈希的十六进制表示

String s = DatatypeConverter.printHexBinary(hash)

您无法从哈希中获取原始字符串

【讨论】:

  • DatatypeConverter 未定义
【解决方案2】:

SHA256 返回纯二进制输出,从 00 到 FF 的所有值对于每个字符基本上都具有相同的可能性。

对于文本输出,您需要将其转换为文本形式,例如Base64 encoding

byte[] encodedBytes = Base64.encodeBase64("Test".getBytes());
System.out.println("encodedBytes " + new String(encodedBytes));

从密码学上正确的哈希(或大多数哈希,甚至是密码学上不正确的哈希)返回到原始输入的唯一方法是在输入后将哈希应用于输入,直到获得相同的结果 - 这是原始输入,或碰撞。

【讨论】:

    猜你喜欢
    • 2021-07-31
    • 2020-02-02
    • 2016-08-01
    • 2015-08-21
    • 2018-02-22
    • 2011-03-07
    • 1970-01-01
    • 2014-08-19
    • 2011-11-02
    相关资源
    最近更新 更多