将SHA1转换回字符串

问题描述:

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

+0

[解码sha1字符串到普通字符串]的可能的重复(http://stackoverflow.com/questions/3492317/decode-sha1-string-to-normal-string) – 2010-10-04 23:22:36

你不能 - SHA1是单向散列。给定SHA1(X)的输出,不可能检索X(至少,不是没有蛮力搜索或者dictionary/rainbow table扫描)

一个非常简单的想法就是想象我给你一个一组三位数字加起来,然后你告诉我那个数字的最后两位数字。从这两位数字中我无法确切得出您开始使用的数字。

又见

思想,这些其他问题也可能会启发你:

SHA是哈希算法。您可以将用户提供的输入的哈希与存储的哈希进行比较,但不能轻松地对该进程进行修改(从存储的哈希中重建原始字符串)。

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

你不能 - 这就是SHA1,MDB5等等的重点。其中大多数是单向散列安全。如果可以颠倒过来,那么任何访问数据库的人都可以获得所有的密码。那会很糟糕。

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

+0

多数民众赞成正是我在做什么,我只是想检查密码更改,但sinsce它不可能,生病只是登录和注销看到,ty – onildo 2010-10-04 22:45:43

+0

您可以通过比较哈希来检查用户是否更改了密码,但在检查密码是否更长或如果你使用SHA1,这是不可能的。 – 2010-10-04 23:59:43

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

如果您有兴趣研究安全散列算法:找到a将产生给定散列的字符串称为“预映像”。如果您可以为SHA-1设计(具有合理的计算复杂性),那么您可能会在密码分析研究人员中名声大噪。目前已知的针对SHA-1的最佳“突破”是找到产生相同散列的两个输入字符串的一种方式,但是1)它在计算上相当昂贵(想想关于在几个月找到一对这样的对),而且不是适用于任意散列值 - 它找到匹配对(相对)很容易找到的特殊输入字符串类之一。

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

+0

对我来说,解密该字段并不是必要的,我只是想检查它是否正确,但我忘记了是否只是登录,我知道密码是否正确>。 onildo 2010-10-09 19:43:09