得到了不同长度的摘要
不需要使用固定长度的key,因为key作为HM:AC的输入,对长度没有要求,key的长度也不影响hmac-MD5、-sha1、-sha256之间的区别。HMAC只是输出定长而已。
虽然两则消息的差别很小,但是H1和H2的差别很大,160位的散列值中,有83位不同,超过了一半。
import hashlib
print("请输入 sha1 的值,将根据前 20 位寻找原值")
x = input().lower()
print("\n 请输入任意数据,将根据前 20 位寻找碰撞")
y = input()
sha = hashlib.sha1()
sha.update(y.encode('utf-8'))
sha_y = sha.hexdigest()
print("输入数据的 HASH 为:" + sha_y)
for i in range(0,10000000):
tmp = str(i)
sha.update(tmp.encode('utf-8'))
sha_tmp = sha.hexdigest()
if sha_tmp[0:5] == x[0:5]:
print("type1:找到原值:" + str(i) + "。其 HASH 值为:" + sha_tmp)
if sha_tmp[0:5] == sha_y[0:5] and i != y :
print("type2.找到碰撞:" + str(i) + "。其 HASH 值为:" + sha_tmp)
copy
多次实验得到,10000000以内找到碰撞(前20位)的次数大概在9~11次之间,估计碰撞概率为,找到原值的次数测试中少一些,但整体差别不大。两种type本质上都是用10000000以内的数字对一个散列码做匹配,概率理论上没有差别。
破解单向特性,需要得到一个与给定散列值获得相同散列值的输入,本实验的前20位匹配中,估计需要1000000次尝试。
破解避免冲突特性,如果是指需要找到一个和给定数据加密的散列值相同的散列值的输入,也应当是1000000次尝试,和破解单向特性难度相同。如果是指需要找到一组数据中出现散列冲突,则难度低于破解单向特性。
学习时间 92分钟
操作时间 77分钟
按键次数 4003次
实验次数 2次
报告字数 1454字
是否完成 完成