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

新手上路,请多包涵

我将用户密码作为 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

原文由 Marcos Roriz Junior 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 414
2 个回答

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

简单的解决方案:使用 Apache 的 commons-codec 库

 String password = new String(Hex.encodeHex(cript.digest()),
                             CharSet.forName("UTF-8"));

原文由 Jason Nichols 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 apache 通用编解码器库:

 DigestUtils.sha1Hex("aff")

结果是0c05aa56405c447e6678b7f3127febde5c3a9238

而已 :)

原文由 altumano 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题