MD5算法的学习

MD5_百度百科

MD5信息摘要算法(Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位的(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德v·李维斯特设计,与1992年公开,用以取代MD4算法。

MD5的散列值通常用十六进制表示,如:

MD5(1)= C4CA4238A0B923820DCC509A6F75849B

MD5(2)= C81E728D9D4C2F636F067F89CC14862C

MD5(MD5) = 7F138A09169B250E9DCB378140907378

算法步骤

1.数据填充与分组

使消息长度满足特定条件(长度为512的倍数),MD5对消息进行填充。

在消息后附加一个1位

接着,附加若干个0位,直到消息长度(mod 512)等于448位

最后,附加消息的原始长度(以64位二进制表示),使总长度达到512的倍数

例如:“abc”

a的ASCLL:97,二进制位:01100001

b的ASCLL:98,二进制位:01100010

c的ASCLL:99,二进制位:01100011

拼接:01100001 01100010 01100011(24位)

添加1个1:01100001 01100010 01100011 1(25位)

添加0:01100001 01100010 01100011 10000000 00000000 00000000 ... (共 423 个 0)

附加原始消息

原始消息是24位:24 = 0x18 = 00000000 00000000 00000000 00000000 00011000

  • 大端序(Big Endian):高字节存储在低地址,低字节存储在高地址。
  • 小端序(Little Endian):低字节存储在低地址,高字节存储在高地址。

以小端序是:

00011000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
最后,将这64位加到之前的末尾:
01100001 01100010 01100011 10000000 00000000 00000000 ... (423 个 0) ... 00011000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

  • 消息内容:01100001 01100010 01100011
  • 填充部分:10000000 00000000 ...(423 个 0)
  • 长度部分:00011000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

2.初始化散列值

MD5算法初始化了4个32位的缓冲区变量

A = 0x67452301
B = 0xEFCDAB89
C = 0x98BADCFE
D = 0x10325476

3.计算散列值

将填充后的消息按512位分成多个块,每个块进一步分为16个32位的小块

(1)定义辅助函数

(2)主循环

MD5对每个消息块执行64次迭代(分为四轮,每轮16次),每次使用一个非线性函数和一个常量K[i]

  • 每轮的常量 K[i]K[i]K[i] 是从正弦函数生成的。
  • 每次迭代都将更新缓冲区变量 A,B,C,DA, B, C, DA,B,C,D。

每次迭代的核心公式:

  • a,b,c,d 是缓冲区变量。
  • M[k]M[k]M[k] 是当前消息块的某个子块。
  • K[i]K[i]K[i] 是常量。
  • sss 是循环左移的位数。

(3)更新缓冲区

(4)输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值