发布时间:2025-07-31 13:44:46 点击量:
HASH GAME - Online Skill Game GET 300
对应于四作,f 分别取 F,G,H,I;对每一轮的 16 次运算,M 分别取 M1,M2,…,M16。对于 4 轮共 64 次运算,t 为给定的一些常数,另外一个常数 s (i ) 是 2 32 * abs (sin(i )) 的整数部分,其中 i=1,2,…,64。在 sin(i ) 中,i 的单位是 弧度,由此构成了 32 位的随机数源 s (i ) ,它消除了输入数据中任何规律性的特 征。 对于 4 轮 64 次操作的具体运算,可查阅课本的内容。所有这些操作完成之 后,将 A,B,C,D 分别加上 A0,B0,C0,D0。然后用下一分组数据继续进行运算, 最后得到一组 A,B,C,D。把这组数据级联起来,即得到 128 比特的 Hash 结果。 需要说明的是,2004 年 8 月,在 Crypto2004 国际密码学会议上,山东大学 王小云教授发现了一种找到 MD5 散列函数的碰撞的方法, 即可以找到两个不同的 输入 x 和 y,得到相同的 Hash 结果。这一发现意味着采用 MD5 算法的数字签名、 完整性检验等信息安全应用系统将不在安全了, 这就促使信息安全系统的设计者 尽快去寻找和探索新的 Hash 算法。
Hash 指向存储结果的缓冲区。 这个函数对未完成的信息先进行 padding(填补)操作,然后处理,并把 最终结果存在 Hash 指向的缓冲区中。 2、算法实现: 利用提供的代码,实现对任意输入长度的字符串进行 MD5 散列函数运 算。 3、雪崩效应检验: 尝试对一个长字符串进行 Hash 运算,并获得其运算结果。对该字符串进 行轻微的改动,比如增加一个空格或标点,比较 Hash 结果值的改变位数。进行 8 次这样的测试。 4、自己编写 MD5 代码。
图 4-1 MD5 算法的实现步骤 初始值分别为: A0=0x01234567,B0=0x89abcdef,C0=0xfedcba98,D0=0x76543210 当设置好这 4 个链接变量后,就开始进入算法的 4 轮循环运算。循环的次数 是信息中 512 位信息分组数目。 首先将上面 4 个链接变量复制到变量 A、B、C、D 中,以备后面进行处理。 然后进入主循环,主循环有 4 轮,每轮循环都很相似。第一轮进行 16 次操 作,每次操作对 A、B、C、D 中的 3 个做一次非线性函数运算,然后将所得结果 加上第四个变量,文本的一个子分组(32 位)和一个常数。再将所得结果向左 循环移 S 位,并加上 A、B、C、D 其中之一。最后用该结果取代 A、B、C、D 其中
入值处理后产生 128 位的 Hash 值。MD5 算法的实现步骤如下(见图 4-1) : 在 MD5 算法中,首先需要对信息进行填充,使其字节长度与 448 模 512 同 余,即信息的字节长度扩展至 n * 512 448 ,n 为一个正整数。填充的方法如下: 在信息的后面填充第一位为 1,其余各位均为 0,直到满足上面的条件时才停止 用 0 对信息的填充。然后,再在这个结果后面附加一个以 64 位二进制表示的填 充前信息长度。经过这两步的处理,现在的信息字节长度为