密码学--md5加密
一、前言
md5的存在是为了创造一个无法被解密的密文。属于hash算法的一种。
密码学期末考试最后一项。
二、md5加密
1、md5特性
① md5加密后的输出序列固定为16字节
② md5输出的密码不可逆
③ 只要1bit的数据变了,md5的输出结果会完全改变
④ 抗碰撞性,两个不同的数据,输出的md5几乎不可能相同。
2、md5用处
① 密码保护:
网站上不会记录你的密码,只会记录你的密码生成的md5值
假如网站数据库沦陷,你的密码一样不会被泄露。
② 完整性检验:
传输数据时,可以把文件的md5一起传输过去,接收方收到数据后可以进行新一轮的md5加密,并与接收到的md5进行比较
③ 数字签名 :
这是个考点,单独讲一下
3、数字签名
数字签名 和 RSA 还有一定的联系,如果忘了RSA,可以先去看看 RSA 。
我们写完作业之后都会在作业签上自己的名字,来证明这篇作业是我写的,或者签合同的时候,我们也会签上自己的名字,证明我们知道了这篇合同的存在。
那网络上的签名要怎么签呢?
① 向有关机构申请 RSA 公钥、私钥。
② 得到即将传输的文件对应的md5值
③ 用RSA的私钥对md5值进行RSA加密,将加密后的md5值和文件一起传给接收方
④ 接收方用你的RSA公钥解密,你传输的加密后md5值,并且接收方自己也计算一下收到的数据
对应的md5值,并进行比较。
如果两个md5值一样,说明是你签过名的文件。
如果两个md5值不一样,有两种可能,一是文件被篡改,二是有人模仿你的签名
4、加密流程
① 将数据补位,补成N*512 + 448位 (如果数据已经等于N*512 + 448位,就再加 512 位),补位内容为 10000000...,首位为1,后面全是0
② 补位完成的 N*512 + 448位 ,再补64位,这64位记录数据的长度
③ 准备四个标准幻数,每个幻术4字节(16进制 内容固定)
A = 01234567 B = 89ABCDEF
C = FEDCBA98 D = 76543210
④ 每次取 512 位(64字节),分为 16 份,1 份 4 字节,并与幻数进行一系列操作(不考),最后得到的值再与 4个幻数 的初始值相加 得到新的四个幻数,再进行第二轮,直到取完 最后一个512 位数据,输出最终加密结果。
⑤ 由于4个幻数的计算都是移位或者异或,长度始终是16字节,因此输出的md5也是固定16字节的。