8

不确定这是否可行,但我希望能够从一个字符串开始,然后弄清楚输入必须是什么crypt才能得到这个字符串。

或者这可能是不可能的,这就是这件事的全部目的?

是的,我正在尝试这个的代码中有盐。

4

7 回答 7

14

按照设计意图,crypt()是一种单向哈希。正如每个人所说,这意味着其意图是发现产生相同哈希的明文字符串在计算上是不可行的。

有几个因素会影响该设计意图。

  1. 计算设计时便宜得多crypt()。更糟糕的是,计算变得更便宜的速度是没有预料到的,所以现在它比以前想象的要便宜得多。

  2. DES 并没有像人们想象的那么好。然而,考虑到当时公众的知识状况,这可能是最好的选择。

  3. 即使计算成本还不足以让您自己破解,但作为互联网的云已经为您完成了很多工作。人们一直在计算和发布彩虹表,它可以缩短反转特定哈希所需的大量计算。(Jeff 也有一篇关于彩虹表的博文。)Salt 有助于防止彩虹表(因为您需要为每个可能的盐值设置一个表),但是在经典实现中使用的盐的大小crypt()仅为 12位,因此它不像希望的那样大。

更糟糕的是,对于某些高价值散列函数(例如为旧的 Microsoft Lan Manager 密码发明但在 Vista 之前的所有 Windows 版本中用作短密码的LM 散列),几乎存在完整的散列字典及其逆。

于 2009-07-21T22:39:34.020 回答
4

如果它是使用 DES 的旧实现crypt(3),那么您几乎可以(但不完全)暴力破解它。

在该方案中,输入被截断为 8 个字符,每个字符截断为 7 位,这意味着需要搜索 56 位不同密码的空间。

仅对于 DES,您可以在价值 1 万美元的 FPGA ( http://en.wikipedia.org/wiki/Data_Encryption_Standard#Brute_force_attack ) 上在大约 18 天内搜索整个空间,因此预期时间为 9 天。但我假设你没有 1 万美元可用于解决这个问题。再过几年,谁知道 DES 破解程序是否会在 PC 的 GPU 上运行。

即便如此,crypt(3)传统上仍涉及 25 轮 DES,对基于 salt 的算法稍作修改,因此您希望它至少比蛮力慢 25 倍。

较新的实现crypt(3)远远超出了蛮力,因为它们基于比旧crypt(3)使用的基于 DES 的更好的哈希算法。

当然,如果字符串不是随机的(例如,如果它是某个人选择的密码),那么您可能会比蛮力获得更好的预期时间。

于 2009-07-21T19:55:48.577 回答
2

不,这是单向哈希函数背后的想法,但在某些情况下,您可以使用google来帮助您。

要回答对此答案的评论(如果有盐,谷歌将无济于事)我说:是和否。salt 增加了解决方案的空间,使得创建完整字典变得不那么容易(因为对于每个单词,您必须为每个可能的两个字母 salt 计算和存储一个加密版本)。如果您假设互联网是一个巨大的数据库,并用谷歌搜索它的索引,那么谷歌所做的就是搜索网络中是否有某个地方出现了加密字符串。盐的存在降低了你找到它的机会,但如果你很幸运地出现了盐,并且它也与明文一起出现,那么你就有了密码。

另请参阅有关 slashdot 的这篇文章

结论:盐会减少在网络上找到特定加密字符串的机会,没错,但谷歌对任何数量的盐都无动于衷,如果你碰巧幸运的话,仍然可以以某种方式提供帮助(就像我的情况一样给)。

于 2009-07-21T19:32:28.140 回答
1

不。

crypt() 不是一种可逆算法(它使用单向函数),通过在加密值中添加盐来使暴力破解变得更加困难。

根据评论编辑。

于 2009-07-21T19:19:09.710 回答
0

不,不可能查看这个站点(假设您使用的是 GNU C 库)http://www.gnu.org/s/libc/manual/html_node/crypt.html

地穴被腌制的方式几乎可以保证您尝试做的事情不会奏效。

于 2009-07-21T19:33:29.307 回答
0

该功能是单向的,是世界上每个密码方案的支柱。如果这里有人回答“是的,这就是如何......”,政府将被迫立即删除他们的评论,烧毁他们的房子,并将他们带到一个秘密地点。

简而言之,没有。

于 2009-07-21T19:41:43.363 回答
-1

不..这是一种单向功能。

于 2009-07-21T19:16:42.103 回答