对称加密:加密和解密的密钥相同
非对称加密:分为公钥和私钥
DES
DES的秘钥长度 64比特=56比特+8比特;没7比特设置一个用于错误检测的比特,实质上秘钥长度是56比特。DES是以64比特明文为一个单位分组进行加密的,这样的密码算法成为分组密码;
Feistel网络
加密的各个步骤成为轮,整个加密过程就是进行多次轮的循环,比如DES就是一种16轮循环的Feistel网络;
轮函数的作用:根据“右侧”和子秘钥对“左侧”进行xor运算,得到加密后的左侧;
也就是说,Feistel网络的解密操作只要按照相反的顺序来使用子密钥就可以完成了
分组密码和流密码
流密码是对数据流进行连续处理的一类密码算法,一般以1比特。8比特或者32比特进行加密解密;
DES和AES都属于分组密码,只能加密固定长度的明文,如果需要加密任意长度的明文,就需要对分组密码进行迭代,而迭代的方法称为分组密码的"模式"。
分组密码的主要模式:ECB、CBC、CFB、OFB、CTB。
ECB分组,直接将明文分组之后加密,这种模式简单容易破译,存在一定风险
CBC模式首先将明文分组与前一个密文分组进行XOR运算,在进行加密
公钥通信流程:
有小A和小B通信:
1.小A先生成一对公钥密钥---- A有公钥和密钥
2.小A将公钥发送给小B-----小A有私钥,小B有公钥
3.小B可以使用公钥对要发送的信息加密,可以将加密后的信息发送给小A
4.小A收到信息可以使用私钥去解密
本着公钥加密原则,私钥解密原则,这个时候公钥的保密行就并不重要了
RSA加密:
RSA加密公式: 密文 = 明文 ^E mod N
RSA的密文是用代表明文的数字的E次方求mod N的结果,这里的E和N就是RSA加密的密钥,也就是说E和N这个组合{E,N}是公钥
RSA解密:
解密公式:明文 = 密文^D mod N
N和加密时相同,{D,N}就是RSA的私钥,这边RSA的D,N还是E使用数字是需要一定条件的
RSA生成密钥私钥
1. N = p * q (先生成两个大质数p,q,因为想要通过大质数的乘积分解出p,q是非常困难的)
2. 求L,L是 (p-1)和(q-1)的最小公倍数
3. 求E 1<E<L 且 E和L的最大公约数为1
4. 求D 1<D<L 且 E*D mod L =1
一组测试数据:p=17 q=19 N =323 L=144 E =5 D=29
但是上述过程并不能阻止中间人攻击!!!