了解哈希表和彩虹表


࿏自ོ༾由ོ༽人͙⃡⌇
2025-04-01 09:00:50 (7天前)

“如果你有一个存储sha-256密码的哈希表,你希望整个表存储在内存中,你有4GB的内存,你可以使用多少个密码

裂纹
</跨度>
?如果你使用彩虹表 每个链中有20个密码,你可以使用多少个密码

裂纹
</跨度>
?(假设密码是10个字符)“

如果我对我读过的东西一无所知,这个问题完全让我有疑问。所以

3 条回复
  1. 0# 早岁那知世事艰 | 2019-08-31 10-32



    使用彩虹表,您只能存储您能够破解的一小部分哈希值。 Hahses是按链组织的,只需要存储链中的第一个和最后一个元素。因此,链长为20时,每个链条将存储2个哈希值,并且能够破解20个哈希值。因此,您获得了10倍的收益。



    因此,如果没有彩虹表(131072000),无论你得到什么结果,你都会乘以10,如果你使用链长为20的彩虹表,你可以获得密码数量。



    实际上链条是由哈希和密码交替制成的。因此,您可以选择将链的开头和结尾存储为密码而不是哈希值。由于密码空间绝对小于散列空间,您可以将每个链的起点和终点存储为密码的压缩形式,并获得一些内存以便能够存储更多的链。


  2. 1# 薄情 | 2019-08-31 10-32



    想象一下像这样的彩虹:



    表是链的列表



    链是密码和哈希



    但是等等……让我们调用这个密码P1和我们称之为He的链中的哈希值



    让我们进一步说我们有一些哈希函数h(x)和一些减少函数R(x),它将h(x)的输出分配给我们的密钥空间中任意但均匀分布的密码



    如果你的链长为20,那就简单地说:



    拿P1 …计算H1 = h(P1)

    将P2计算为R(h1)…将H2计算为h(P2)

    将Pn计算为R(hn-1)…将Hn计算为h(Pn)

    直到20步后,我们才有P20和H20 ……这也是他



    现在我们存储P1和He ……又名P1和H20



    这是一个链条



    一个表由一个列表…一个排序的链表…按哈希排序
    如果你有一些要破解的哈希值x,请执行以下操作:



    指定y = x

    在你的桌子里寻找y

    如果找到,请获取相应链的密码,并重建一旦形成链并查找密码的所有密码/哈希元组…

    如果没有找到,则指定y = h(R(y))并重新开始直到获得匹配或达到链长



    所以…就你的初步问题而言……



    如果您使用普通字典查找密码,则需要存储密码和哈希值…每个哈希值一个密码…一对/元组将使您能够攻击一个密码



    如果你使用彩虹表,你仍然会在内存中存储每个哈希的一个密码…但是时间记忆权衡将允许你攻击更多的哈希…在一个理想的世界中,这将是你的乘数链长…在现实世界中,这取决于R()有多好……可能发生冲突,这将导致一个密码/哈希存在于多个链中,从而为您的rainbowtable引入冗余


登录 后才能参与评论