将SHA1转换回字符串

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

你不能 – SHA1是单向哈希。 给定SHA1(X)的输出,不可能检索X(至少,没有powershell搜索或字典 / 彩虹表扫描)

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

也可以看看

  • 是否有可能扭转sha1?
  • 将sha1字符串解码为普通字符串

想到MD5,这些其他问题也可能启发你:

  • 反转MD5哈希
  • 怎么不可能“解密”MD5哈希?

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

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

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

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

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

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

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