MD5

MD5 是将明文处理成 16byte 的哈希摘要

用途

md5 常与其他算法结合,用于数字签名,如邮件发送

加密过程

m=md5(letter)m=rsa(m,private key)

检验过程

md5(letter)==rsa(m,public key)

实现

结构体定义

typedef struct _MD5_CTX
{
	unsigned long state[4];
	unsigned long count[2]; /* 已处理的报文的二进制位数,最大值=2^64-1 */
	unsigned char data[4];  /* 64字节message块 */
}

Init

对 state 赋初始值,清空 count

Update

每 64 个字节为一组,进行处理更新

Final

因为不是所有的明文都是 64 字节的倍数,所以需要对缺失的内容进行补充,补充的内容包括 填充物明文长度

破解

MD5 的破解关键在于找到 Collision

Collision

md5(x)=md5(x)  (xx)

rainbow table

一种较弱的 MD5 破解方法,关键在于 预计算