【发布时间】:2016-01-31 18:56:39
【问题描述】:
所以我试图更好地理解哈希表和彩虹表,在我的阅读中,我觉得我开始掌握它的窍门。有一个检查你的知识问题是这样的:
"如果你有一个存储 sha-256 密码的哈希表,并且你希望整个表都存储在内存中,并且你有 4GB 的内存,你可以破解多少个密码?如果你使用一个包含 20 个密码的 Rainbow 表每条链,你能破解多少个密码?(假设密码是10个字符)"
这完全让我怀疑我是否知道我所阅读的内容。所以这就是我到目前为止想出的。
如果每个 ShA-256 散列的大小始终为 256 位,并且我们知道单个兆字节中有 8388608 位,则等于每兆 32768 个 SHA-256 密码。 4000 兆,所以我们将 32768 乘以 4000,得出存储在内存中的 131072000 个密码。
但是如何将它应用于彩虹表中的 20 个链密码?我认为彩虹表存储了哈希值和它们的反面,这样虽然它占用了更多空间,但它可以更快地解决。是否有公式或其他东西可以确定我丢失了多少空间以及丢失了多少密码?
非常感谢任何帮助或知识。我感谢您的时间和智慧。 :)
【问题讨论】:
-
我不知道链是什么,但是第一次计算是错误的,因为你没有考虑密码的存储。
-
嘎。我什至没有想到这一点。密码本身的大小不是一个变量,因此无法准确计算吗?
-
是的,但您的任务有提示“假设密码为 10 个字符”,我假设这也延伸到第一个问题。
-
嗯。我以为它只适用于彩虹桌部分,但我想它确实可能适用于两者。我将开始尝试弄清楚 10 个字符有多大。但是一旦我知道了这一点,我是否只是开始猜测直到我得到一个可行的大小,减少大小以适应哈希和密码的数学是什么?
-
不要忘记,当您将其存储在哈希表中时,您当前的计算只涉及您需要存储的原始数据,而没有其他结构,例如哈希/索引。这在很大程度上取决于您使用的实现和语言(Java 的开销比 C 高得多)。
标签: hash cryptography hashtable rainbowtable