不确定这是否可行,但我希望能够从一个字符串开始,然后找出输入到 crypt
中的内容才能得到这个字符串。
或者这可能是不可能的,无论如何这就是这件事的全部目的?
是的,我正在尝试的代码中有一个盐。
最佳答案
根据设计意图,crypt()
是一种单向散列。正如每个人所说,这意味着其意图是发现产生相同散列的明文字符串在计算上是不可行的。
有几个因素会影响该设计意图。
与设计
crypt()
时相比,计算成本很多。更糟糕的是,计算变得更便宜的速度是没有预料到的,所以现在它比以前想象的要便宜得多。DES 并没有像人们想象的那样经受住考验。然而,考虑到当时的公共(public)知识状况,这可能是最佳选择。
即使计算成本还不足以让您自己破解,互联网云已经为您完成了很多工作。人们一直在计算和出版Rainbow Tables这使得可以简化反转特定哈希所需的大量计算。 ( Jeff had a blog post on rainbow tables too 。)Salt 有助于防止出现彩虹表(因为您需要为盐的每个可能值设置一个表),但是
crypt()
的经典实现中使用的盐的大小> 只有 12 位,所以这不是一个可能希望的那么大的 block 。
更糟糕的是,对于某些高值散列函数(例如 LM hash 为旧的 Microsoft Lan Manager 密码发明,但在 Vista 之前的所有 Windows 版本中用于短密码)存在几乎完整的散列字典及其逆。
关于c - 有没有办法在 c 中反转 crypt()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1161157/