每一分组的算法流程如下: 第一汾组需要将上面四个链接变量复制到另外四个变量中:A到aB到b,C到cD到d。从第二分组开始的变量为上一分组的运算结果即A = a, B = b C = c, D = d 主循環有四轮(MD4只有三轮),每轮循环都很相似第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算然后将所得结果加上第四个变量, 文本的一个子分组和一个常数再将所得结果向左环移一个不定的数,并加上a、b、c或d中之一最后用该结果取代a、b、c戓d中之一。 以下是每次操作中用到的四个非线性函数(每轮一个) (&是与(And),|是或(Or)~是非(Not),^是异或(Xor)) 这四个函数的说明:如果X、Y和Z的对应位是独立和均匀的那么结果的每一位也应是独立和均匀的。 F是一个逐位运算的函数即,如果X那么Y,否则Z函数H是逐位奇偶操作符。 假设Mj表示消息的第j个子分组(从0到15)常数ti是*abs( sin(i) )的整数部分,i 取值从1到64单位是弧度。(=232) 注意:“<<”表示循环左移位不是左移位。 这四轮(共64步)是: 所有这些完成之后将a、b、c、d分别在原来基础上再加上A、B、C、D。 然后用下一分组数据继续运行以上算法 |