【问题标题】:How to convert a string to a hashed value and revert it back?如何将字符串转换为哈希值并将其还原?
【发布时间】:2013-09-20 19:16:01
【问题描述】:

我需要 2 种方法:一种将我的字符串值转换为哈希值,使用 md5 会很好,另一种将哈希字符串恢复为原始字符串。这可能吗?

【问题讨论】:

  • 散列就像绞肉机。牛进去,汉堡出来。您不能将汉堡包喂入同一个研磨机并期望得到一头牛。你想要加密,而不是散列。
  • 如果要检查原始哈希的有效性,只需重新哈希用户输入并与原始哈希进行比较即可。否则,哈希的全部目的(“不可能”取回原始输入值)是完全没有意义的。
  • @MarcB “牛进去,汉堡出来。” 加减几步。我喜欢用土豆煎饼的比喻,即:你不能把土豆煎饼变回土豆。
  • @NullUserException:取决于屠夫是谁。我敢肯定,一些较大的食品集团不会为诸如屠宰或剔骨之类的细节而烦恼。

标签: java hash md5


【解决方案1】:

不可能将散列转回原始输入字符串,根据散列函数的定义,它们不能被反转。此外,可能有无限数量的输入哈希到相同的值,尽管在实践中它们非常非常难以找到(它们被称为“碰撞”)。

关于问题的另一部分,使用标准库计算哈希很简单。例如:

byte[] bytesOfMessage = yourString.getBytes("UTF-8"); // pass the right encoding
MessageDigest md = MessageDigest.getInstance("MD5");  // specify the algorithm
byte[] thedigest = md.digest(bytesOfMessage);         // here's the hash

【讨论】:

  • 重点容易,我们有彩虹桌和其他东西。
  • @MightyPork 彩虹表不允许您 100% 确定地检索原始值,只有一个可能的输入。
猜你喜欢
  • 2017-10-28
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
相关资源
最近更新 更多