加解密相关
1.hash算法(摘要认证)
1.1MD5
MD5 具有很高的安全性,可以产生出一个128位(16字节)的散列值(hash value),它对应任何字符串都可以加密成一段唯一的固定长度的代码,用于确保信息传输完整一致。
目前MD5加密算法是不可逆的,当然这种方式加密的密文也不需要解密,需要的时候直接发送原始密文就好。
实现步骤:
1.1.1填充对齐
对源数据进行填充,使其变成一个(N*512-64)位大小的数据
填充方法:在消息后面进行填充,填充第一位为1,其余为0。
再加上64位表示原数据的长度,填充后就是512整数倍。
1.1.2分块分组
按每个512位为一组进行分组,每组里面分成16个32位,也就是16个int。
- 四个常量
A=0x01234567
B=0x89abcdef
C=0xfedcba98
D=0x76543210
- 四个基础线性函数
F(X,Y,Z) = (X & Y) | ((~X) & Z);
G(X,Y,Z) = (X & Z) | (Y & (~Z));
H(X,Y,Z) = X ^ Y ^ Z;
I(X,Y,Z) = Y ^ (X | (~Z));
(&是与,|是或,~是非,^是异或)
- 四个数据处理函数
Mj表示第M组第j个int数
FF(a,b,c,d,Mj,s,ti)表示a=b+((a+F(b,c,d)+Mj+ti)<<<s)
GG(a,b,c,d,Mj,s,ti)表示a=b+((a+G(b,c,d)+Mj+ti)<<<s)
HH(a,b,c,d,Mj,s,ti)表示a=b+((a+H(b,c,d)+Mj+ti)<<<s)
II(a,b,c,d,Mj,s,ti)表示a=b+((a+I(b,c,d)+Mj+ti)<<<s)
1.2.3对分组进行计算(每块进行多轮压缩)
第一轮
a=FF(a,b,c,d,M0,7,0xd76aa478)
b=FF(d,a,b,c,M1,12,0xe8c7b756)
c=FF(c,d,a,b,M2,17,0x242070db)
d=FF(b,c,d,a,M3,22,0xc1bdceee)
a=FF(a,b,c,d,M4,7,0xf57c0faf)
b=FF(d,a,b,c,M5,12,0x4787c62a)
c=FF(c,d,a,b,M6,17,0xa8304613)
d=FF(b,c,d,a,M7,22,0xfd469501)
a=FF(a,b,c,d,M8,7,0x698098d8)
b=FF(d,a,b,c,M9,12,0x8b44f7af)
c=FF(c,d,a,b,M10,17,0xffff5bb1)
d=FF(b,c,d,a,M11,22,0x895cd7be)
a=FF(a,b,c,d,M12,7,0x6b901122)
b=FF(d,a,b,c,M13,12,0xfd987193)
c=FF(c,d,a,b,M14,17,0xa679438e)
d=FF(b,c,d,a,M15,22,0x49b40821)
第二轮
a=GG(a,b,c,d,M1,5,0xf61e2562)
b=GG(d,a,b,c,M6,9,0xc040b340)
c=GG(c,d,a,b,M11,14,0x265e5a51)
d=GG(b,c,d,a,M0,20,0xe9b6c7aa)
a=GG(a,b,c,d,M5,5,0xd62f105d)
b=GG(d,a,b,c,M10,9,0x02441453)
c=GG(c,d,a,b,M15,14,0xd8a1e681)
d=GG(b,c,d,a,M4,20,0xe7d3fbc8)
a=GG(a,b,c,d,M9,5,0x21e1cde6)
b=GG(d,a,b,c,M14,9,0xc33707d6)
c=GG(c,d,a,b,M3,14,0xf4d50d87)
d=GG(b,c,d,a,M8,20,0x455a14ed)
a=GG(a,b,c,d,M13,5,0xa9e3e905)
b=GG(d,a,b,c,M2,9,0xfcefa3f8)
c=GG(c,d,a,b,M7,14,0x676f02d9)
d=GG(b,c,d,a,M12,20,0x8d2a4c8a)
第三轮
a=HH(a,b,c,d,M5,4,0xfffa3942)
b=HH(d,a,b,c,M8,11,0x8771f681)
c=HH(c,d,a,b,M11,16,0x6d9d6122)
d=HH(b,c,d,a,M14,23,0xfde5380c)
a=HH(a,b,c,d,M1,4,0xa4beea44)
b=HH(d,a,b,c,M4,11,0x4bdecfa9)
c=HH(c,d,a,b,M7,16,0xf6bb4b60)
d=HH(b,c,d,a,M10,23,0xbebfbc70)
a=HH(a,b,c,d,M13,4,0x289b7ec6)
b=HH(d,a,b,c,M0,11,0xeaa127fa)
c=HH(c,d,a,b,M3,16,0xd4ef3085)
d=HH(b,c,d,a,M6,23,0x04881d05)
a=HH(a,b,c,d,M9,4,0xd9d4d039)
b=HH(d,a,b,c,M12,11,0xe6db99e5)
c=HH(c,d,a,b,M15,16,0x1fa27cf8)
d=HH(b,c,d,a,M2,23,0xc4ac5665)
第四轮
a=II(a,b,c,d,M0,6,0xf4292244)
b=II(d,a,b,c,M7,10,0x432aff97)
c=II(c,d,a,b,M14,15,0xab9423a7)
d=II(b,c,d,a,M5,21,0xfc93a039)
a=II(a,b,c,d,M12,6,0x655b59c3)
b=II(d,a,b,c,M3,10,0x8f0ccc92)
c=II(c,d,a,b,M10,15,0xffeff47d)
d=II(b,c,d,a,M1,21,0x85845dd1)
a=II(a,b,c,d,M8,6,0x6fa87e4f)
b=II(d,a,b,c,M15,10,0xfe2ce6e0)
c=II(c,d,a,b,M6,15,0xa3014314)
d=II(b,c,d,a,M13,21,0x4e0811a1)
a=II(a,b,c,d,M4,6,0xf7537e82)
b=II(d,a,b,c,M11,10,0xbd3af235)
c=II(c,d,a,b,M2,15,0x2ad7d2bb)
d=II(b,c,d,a,M9,21,0xeb86d391)
每轮循环后,将A,B,C,D分别加上a,b,c,d,然后进入下一循环
1.2.4解释问题
- MD5为什么能把一个不管多长的文件都变成定长的
MD5使用4个32位的数据,和数据中的每个32位的数据进行计算,最终输出这4个32位数
2.对称加密:DES、AES
2.1DES
加密过程
①将明文分为64位的分组,首先对64位码做初始IP置换,再进行16论迭代变换,其中包括ESP三种运算,最后进行逆初始置换。
(对称)涉及到了15个表,前三个用来计算子密钥,然后接着两个初始化表计算初始数据的置换,完成之后有一个F和(8个表)、P和最后一次置换表,把初始密钥经过计算转换,然后经过循环,然后经过置换,得到16位子密钥,初始数据块通过初始置换和扩展置换得到数据块,然后通过s和,一共八块的置换,得到结果,再通过p和置换,最后得到左右右左32个,一共64个,得到最终置换,最终得到最终数据;算法为密码体制中的对称密码体制,主要用于明文的加密或密文的解密,是一种效率较高的加密算法; CBC模式通过对分组密码增加简单的操作和反馈,避免ECB出现的密文和明文一一对应的问题,也就是后面的加密解密与前面有依赖关系,在CBC模式中用之前的密文分组进行反馈,这样就不会出现一对一的问题,在加密时,用前一个输出的密文分组与当前明文进行异或,然后再加密,当解密时将前一个输出的明文分组与密文分组求异或,再解密可以简单表示(计算子密钥、初始化数据块、对数据块进行加密)效率好,速度快(结果64位)
DES加密算法用途
DES是一种数据加密标准,主要用于明文的加密或密文的解密,是一种效率较高的加密
2.2 AES
3.非对称
rsA:非对称
把位数相同的素数写到相应的表中去,然后把素数表删除掉,通过相应的函数制造公钥和私钥,公钥主要是与(p-1)(q-1)做逆元关系,私钥做逆元运算,他们互不相关
-
RSA加密算法用途
网络传输、银行系统、军事情报,数字签名等
SHA:
补位、补长度、使用的常量、计算消息摘要,加密不揭秘
-
SHA加密算法用途
数字签名、数字时间戳、数字证书
RC4
是一些广泛使用的协议和标准的一部分,常用于无线通信网络加密的WEP和WPA,以及TLS(Transport Layer Security),还被集成于Microsoft Windows、Lotus notes、Apple AOCE等应用中算法简单、速度快,不管是软件还是硬件,实现起来都十分容易,因而应用广泛。(对称)
RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。