Java计算字符串的sha-1摘要的十六进制表示。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (67)

我将用户密码作为sha1哈希存储在数据库中。

不幸的是我得到了奇怪的答案。

我将这个字符串存储为:

MessageDigest cript = MessageDigest.getInstance("SHA-1");
              cript.reset();
              cript.update(userPass.getBytes("utf8"));
              this.password = new String(cript.digest());

我想要这样的东西 - >

aff - >“0c05aa56405c447e6678b7f3127febde5c3a9238”

而不是

aff→ V@ \ D〜fx : 8

提问于
用户回答回答于

发生这种情况是因为cript.digest()返回一个字节数组,您试图将其作为字符串打印出来。您想将其转换为可打印的十六进制字符串。

简单的解决方案:使用Apache的公共编解码器库

String password = new String(Hex.encodeHex(cript.digest()),
                             CharSet.forName("UTF-8"));
用户回答回答于

使用apache公共编解码器库:

DigestUtils.sha1Hex("aff")

结果是0c05aa56405c447e6678b7f3127febde5c3a9238

扫码关注云+社区