欢迎光临散文网 会员登陆 & 注册

摘要算法:MD2

2022-10-15 02:06 作者:CSDN首席喷子  | 我要投稿

MD2是MD系列摘要算法的鼻祖,能够接受任意长度的输入,得到针对输入特定的16字节(128位)输出。输入数据只要变化一位,输出就会相应变化,因此可以用于验证数据。尽管现在已经有了更安全的摘要算法,如SHA3,但其和MD2的基本结构都是一样的。其计算方法为:

(1)将数据填充为16的整倍数,填充值是缺失的字节数。比如“a”,其后面需要填充15个字节,这15个字节的值都是0x0f。此时字节总数为N,记填充后数据为M。

(2)为这N个字节添加校验和。MD2根据圆周率构建了一个256位伪随机数组,称为“S盒”。通过S盒计算伪码如下:

checksum[16];

For i = 0 to 15 do

    checksum[i] = 0;

End;  // 初始化

L = 0;

For i = 0 to (N / 16 - 1) do

    For j = 0 to 15 do

        c_tmp = M[i * 16 + j];

        checksum[j] = checksum[j]  ^ S[c_tmp ^ L];

        L = checksum[j];

    End; // j

End; // I

然后把这16字节的校验和放在填充后的数据后面,记为M`,此时总长度为N`。

(3)初始化缓存。创建一个48位的输出缓存X,并清零初始化。

(4)处理数据。

For i = 0 to (N` / 16 – 1) do

    For j = 0 to 15 do

        X[16 + j] = M`[i * 16 + j];

        X[32 + j] = X[16 + j] ^ X[j];

    End;

    t = 0;

    For j = 0 to 17 do

        For k = 0 to 47 do

            t = X[k] = X[k] ^ S[t];

        End;

    t = (t + j) % 256;

    End;

End;

(5)最后把前16字节取出,就是MD2值。

一个C语言实例如下:


摘要算法:MD2的评论 (共 条)

分享到微博请遵守国家法律