Python 2.7 通过python查找的Rainbow攻击失败。
我对分配给我的任务有一些问题。要点是我必须对一辆“汽车fop”进行彩虹攻击。 使用生成器表,RainbowAttack.py脚本将执行以下操作:Python 2.7 通过python查找的Rainbow攻击失败。,python-2.7,rainbowtable,rainbowattack,Python 2.7,Rainbowtable,Rainbowattack,我对分配给我的任务有一些问题。要点是我必须对一辆“汽车fop”进行彩虹攻击。 使用生成器表,RainbowAttack.py脚本将执行以下操作: 按键向car广播(在本例中为对手) car/eve响应挑战u 然后,该键以一个由MD5(s | | u)组成的散列来响应 Eve现在使用彩虹表破解s 我们使用MD5散列我们的响应和密钥 然后我们在散列上使用我们的缩减函数,取前28位 f_i(x)=(f(x)+i)模式2^28。 我的hash和redcution函数 def f(s, i=0): ""
u
MD5(s | | u)
组成的散列来响应s
f_i(x)=(f(x)+i)模式2^28。
我的hash和redcution函数
def f(s, i=0):
"""Lowest 28 bits of (MD5(s||u) % i)"""
digest = '0x' + md5.new(str(s) + str(u)).hexdigest()
result = hex((int(digest, 16) + i) % 2**BIT_SIZE)[:BIT_SIZE/4+2]
return result
不管怎样,当我们运行脚本时,我们收到响应,我们计算所有后继项,并将它们与彩虹表中的端点进行比较,如果找到匹配项,我们得到碰撞的起点,现在我们检查从起点到终点的链中是否有键,如果这里的一个键与我们从fop得到的响应相同我们知道前一把钥匙是打开车门的秘密
目前,我们只能在彩虹表的起始位置或结束位置找到钥匙,而不是在链中。
下面是循环的代码,用于检查成功者,检查我们的继任者是否在彩虹表中,如果他们在彩虹表中,我们检查来自汽车fop的响应是否在那里,如果是,我们有我们的钥匙
这可能是我们计算后继键时产生的问题,因为还原函数将不同于键上使用的函数(我将递增,使链中所有键的还原函数略有不同)
可以找到彩虹表和文件(github)
(derp.py(彩虹攻击)和table1.csv(将名称更改为table.csv))
def find_key(table, r):
"""Search for matching respons in Rainbow-table"""
succ = [r]
print r
for i in xrange(1, CHAIN_LEN):
succ.append(f(succ[i-1],i))
for key, value in table.iteritems():
if value in succ:
print "\tCollition: %s -> %s" % (key, value)
ss = key
for i in xrange(0, CHAIN_LEN):
rs = f(ss, i)
if rs==r:
return ss
ss = rs
return -1