将SHA1转换回字符串

时间:2010-10-04 21:05:56

标签: ruby-on-rails sha1

我的应用上有用户模型,密码字段使用sha1。我想要的是,当我从数据库中获取sha1时,再次使它成为一个字符串。我该怎么做?

5 个答案:

答案 0 :(得分:11)

你不能 - SHA1是单向哈希。鉴于SHA1(X)的输出,无法检索X(至少,没有强力搜索或dictionary / rainbow table扫描)

一个非常简单的思考方式是想象我给你一组三位数的数字加起来,你告诉我这个总和的最后两位数。从这两位数字中我不可能确切地计算出你开始使用的数字。

另见

关于MD5的想法,这些其他问题也可能启发你:

答案 1 :(得分:2)

你不能 - 这就是SHA1,MDB5等等。大多数都是单向哈希的安全性。如果可以撤消,那么获得访问您数据库的任何人都可以获得所有密码。那会很糟糕。

而不是取消数据库的散列,而是散列密码尝试,并将其与数据库中的散列值进行比较。

答案 2 :(得分:0)

SHA是一种散列算法。您可以将用户提供的输入的哈希与存储的哈希进行比较,但是您不能轻易reverse该进程(从存储的哈希重建原始字符串)。

除非你选择暴力或使用彩虹表(当提供足够长的输入时两者都非常慢)。

答案 3 :(得分:0)

如果从实际角度谈论这个问题,现在就放弃并认为这是不可能的。查找原始字符串 是不可能的(除非意外)。密码安全散列的大部分要点是确保您找不到任何产生相同散列的其他字符串。

如果您对安全散列算法的研究感兴趣:找到将生成给定散列的 a 字符串称为“preimage”。如果你能够为SHA-1设法(具有合理的计算复杂性),你可能会在密码分析研究人员中变得相当有名。目前已知的针对SHA-1的最佳“突破”是找到两个产生相同散列的输入字符串的方法,但是1)它的计算成本相当昂贵(考虑到在一个月中每周7天每天24小时运行的机器数量)找到一个这样的对的时间,并且对任意哈希值起作用 - 它找到一个特殊的输入字符串类别,匹配对(相对)很容易找到。< / p>

答案 4 :(得分:0)

你不能用SHA-1做到这一点。但是,考虑到您需要做什么,您可以尝试使用AES代替。 AES允许加密和解密。