【问题标题】:Is there a way to shorten a java.security.MessageDigest generated value?有没有办法缩短 java.security.MessageDigest 生成的值?
【发布时间】:2011-11-25 07:26:30
【问题描述】:

如果我使用此 Java 代码生成消息摘要(用于我的应用中的安全功能):

java.security.MessageDigest saltDigest = MessageDigest.getInstance("SHA-256");
saltDigest.update(UUID.randomUUID().toString().getBytes("UTF-8"));
String digest = String.valueOf(Hex.encode(saltDigest.digest()));

我最终得到了一个非常长的字符串,如下所示:

29bcf49cbd57bbc41e601b399a93218ef99c6e36bae3598b5a5a64ac66d9c254

传递 URL 不是最好的方法!

有没有办法缩短这个?

【问题讨论】:

  • 您可以使用 Base64 代替简单的十六进制编码。这应该可以节省一些字符。
  • 真的,谢谢。我忘了查看该包中的其他类:static.springsource.org/spring-security/site/docs/3.0.x/apidocs/… 我想知道 Base64 会影响摘要的“安全性”程度。如果真的只是几个字符的问题,我想可能不会那么多。
  • 由于 Base64 和 Hex 编码表示的信息完全相同,因此内容的安全性不会受到影响。 但是如果某些自动化工具试图处理您的值,那么它可能希望它始终采用相同的格式。
  • 好的,我明白了。嗯,这只是在 Spring MVC 应用程序中的 URL 和 HTML 表单帖子中传递的信息。因此,没有依赖于特定格式的自动化工具。它只会与 PK 结合用于数据库查找,以确保只有具有有效权限的人才能修改实体。这是否是一个好主意是另一个问题。但我理解你关于 Hex 和 Base64 如何不改变底层内容的观点。

标签: java string security message-digest


【解决方案1】:

嗯,这是 SHA-256 哈希的预期大小,对吧?你总是可以的

String sha256 = yourSha256Calculation();
sha256.substring(0,10);

要获得更短的字符串,但不会是 SHA-256。你真正想达到什么目标?

SHA-256 并不是目前最短的哈希,请查看http://www.fileformat.info/tool/hash.htm?text=hello 进行比较。

【讨论】:

  • 我明白了。好吧,我正在尝试生成一些可以与实体相关联的唯一值(除了它的主键),以使其只有具有摘要值的人才能访问。我的想法是,某人同时拥有摘要值和 pk 的可能性极小——尽管他们可能偶然拥有其中之一。
  • 你想要什么样的输出?问题是字符串的长度吗?像 MD5 或 CRC 这样更小的散列大小呢?你可以在这里比较输出fileformat.info/tool/hash.htm?text=hello。
  • 老兄!你摇滚。很棒的链接。正是我需要的。是的,CRC可能没问题。谢谢,伙计。
  • @arezzo:请注意,并非所有这些哈希都是安全的。
  • @Christoffer Hammarström:谢谢。你说得对。我需要考虑这一点。出于安全原因,我可能无法负担 CRC32 哈希,因为我对密码哈希使用相同的计算。
猜你喜欢
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多