算法
MD表示消息摘要(Message Digest) 。MD5是MD4的改进版,该算法对输入的任意长度消息产生128位散列值(或消息摘要 。MD5算法可用图4-2表示 。
对md5算法简要的叙述可以为:md5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值 。
1) 附加填充位
首先填充消息,使其长度为一个比512的倍数小64位的数 。填充 *** :在消息后面填充一位1,然后填充所需数量的0 。填充位的位数从1~512 。
2) 附加长度
将原消息长度的64位表示附加在填充后的消息后面 。当原消息长度大于264时,用消息长度mod 264填充 。这时,消息长度恰好是512的整数倍 。令M[0 1…N?1]为填充后消息的各个字(每字为32位),N是16的倍数 。
3) 初始化MD缓冲区
初始化用于计算消息摘要的128位缓冲区 。这个缓冲区由四个32位寄存器A、B、C、D表示 。寄存器的初始化值为(按低位字节在前的顺序存放):
A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10
4) 按512位的分组处理输入消息
这一步为MD5的主循环,包括四轮,如图4-3所示 。每个循环都以当前的正在处理的512比特分组Yq和128比特缓冲值ABCD为输入,然后更新缓冲内容 。
四 *** 作的不同之处在于每轮使用的非线性函数不同,在之一 *** 作之前,首先把A、B、C、D复制到另外的变量a、b、c、d中 。这四个非线性函数分别为(其输入/输出均为32位字):
F(X,Y,Z) = (XY)((~X) Z)
G(X,Y,Z) = (XZ)(Y(~Z))
H(X,Y,Z) = XYZ
I(X,Y,Z) = Y(X(~Z))
其中,表示按位与;表示按位或;~表示按位反;表示按位异或 。
此外,由图4-4可知,这一步中还用到了一个有64个元素的表T[1..64],T[i]=232×abs(sin(i)),i的单位为弧度 。
根据以上描述,将这一步骤的处理过程归纳如下:
for i = 0 to N/16?1 do
/* 每次循环处理16个字,即512字节的消息分组*/
/*把第i个字块(512位)分成16个32位子分组拷贝到X中*/
for j = 0 to 15 do
Set X[j] to M[i*16+j]
end/*j 循环*/
/*把A存为AA,B存为BB,C存为CC,D存为DD*/
AA = A
BB = B
CC = C
DD = D
/* 之一轮*/
/* 令[abcd k s i]表示操作
a = b + ((a + F(b,c,d) + X[k] + T[i])s)
其中,Ys表示Y循环左移s位*/
/* 完成下列16个操作*/
[ABCD071 ?] [DABC1122 ?] [CDAB2173 ?] [BCDA3224 ?]
[ABCD475 ?] [DABC5126 ?] [CDAB6177 ?] [BCDA7228 ?]
[ABCD879 ?] [DABC91210] [CDAB101711] [BCDA112212]
[ABCD12713] [DABC131214] [CDAB141715] [BCDA152216]
/* 第二轮*/
/*令[abcd k s i]表示操作
a = b + ((a + G(b,c,d) + X[k] + T[i])s)*/
/*完成下列16个操作*/
[ABCD1517] [DABC6918] [CDAB111419] [BCDA02020]
[ABCD5521] [DABC10922] [CDAB151423] [BCDA42024]
[ABCD9525] [DABC14926] [CDAB31427] [BCDA82028]
[ABCD13529] [DABC2930] [CDAB71431] [BCDA122032]
/*第三轮*/
/*令[abcd k s t]表示操作
a = b + ((a + H(b,c,d) + X[k] + T[i])s)*/
/*完成以下16个操作*/
[ABCD5433] [DABC81134] [CDAB111635] [BCDA142336]
[ABCD1437] [DABC41138] [CDAB71639] [BCDA102340]
[ABCD13441] [DABC01142] [CDAB31643] [BCDA62344]
[ABCD9445] [DABC121146] [CDAB151647] [BCDA22348]
/*第四轮*/
/*令[abcd k s t]表示操作
a = b + ((a + I(b,c,d) + X[k] + T[i])s) */
/*完成以下16个操作*/
[ABCD0649] [DABC71050] [CDAB141551] [BCDA52152]
[ABCD12653] [DABC31054] [CDAB101555] [BCDA12156]
[ABCD8657] [DABC151058] [CDAB61559] [BCDA132160]
[ABCD4661] [DABC111062] [CDAB21563] [BCDA92164]
A = A + AA
B = B + BB
C = C + CC
D = D + DD
end/*i循环*/
5) 输出
由A、B、C、D四个寄存器的输出按低位字节在前的顺序(即以A的低字节开始、D的高字节结束)得到128位的消息摘要 。
以上就是对MD5算法的描述 。MD5算法的运算均为基本运算,比较容易实现且速度很快 。
安全散列函数(SHA)
算法
SHA是美国NIST和NSA共同设计的安全散列算法(Secure Hash Algorithm),用于数字签名标准DSS(Digital Signature Standard) 。SHA的修改版SHA–1于1995年作为美国联邦信息处理标准公告(FIPS PUB 180–1)发布[2] 。
2罗氏活力血糖仪 密码牌拔下来再插还有用吗你好,罗氏活力型血糖仪的密码牌与血糖试纸是相对应的 。你购买的血糖试纸里边会附送一个密码牌 。试纸只有使用相同的密码牌才能准确测试出结果 。
如果你以前试纸的密码牌跟新买的密码牌数字一样,那么更换密码牌不会有什么影响 。
推荐阅读
- 快手上说盘他是什么意思
- 还原手机是什么意思啊,手机里还原手机是什么意思
- 歇斯底里什么意思「歇斯底里 是什么意思」
- 海白菜是什么毒品 海白菜是什么
- 2022年是什么本命年 虎年穿红衣辟邪保平安
- 男人梦见黑老鼠是什么征兆
- 做梦梦见一条大鱼是什么意思
- 梦见自己牙齿碎了是什么意思
- 梦见自己的一颗牙掉了是什么意思
- 姜太公钓鱼的故事是什么意思 姜太公钓鱼的故事是什么