加密协议
加密算法说白了就是数学算法,简单点来说就理解为一个函数吧,将一个数据经过某种复杂处理,映射为另一个数据;这就是加密。加密的关键不是在于加密算法与解密算法本身的编写有多大难度,而是在某些未知条件下,去进行解密的难度;难度越大,则越可靠,当然这也与未知条件的可获取性或者说是隐蔽性有关;
下面就概述一下常见的加密算法。
DES加密
DES加密是美国联邦政府采用的一种加密方式,在1998年就已经废弃,被AES加密所替代,不过在国内的很多金融机构中还在应用:DES加密是对称加密,即加密和解密用的密钥相同;采用分组加密的方式;
输入:key(密钥)、data(加密数据 64位)、mode(加密方式 加密/解密)
输出:des_data(加密后的数据)
加密的流程:DES加密本质上是对64位数据的各各位 进行重新排列组合 并于密钥进行运算 循环迭代
① 初始置换,得到L0(左32位) R0(右32位);
初始置换的规则是固定的
58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8, 57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,
即将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0 是右32位,例:设置换前的输入值为D1D2D3......D64,则经过初始置换后的结果为:L0=D58D50...D8;R0=D57D49...D7。
②密钥控制下的16轮加密运算
密钥:一共 64位,其中 第8、16、24……位是奇偶校验位,所以有效位数是56位;
在这16轮加密运算过程中,使用的是 由64位密钥产生的48位子密钥进行加密的,各轮的子密钥不同。
Ⅰ 48位子密钥的生成(不去细究 注意:不考虑每个字节的第8位)
Ⅱ 扩展置换
扩展置换在右半部分(Ri)的32位进行,由32位扩展到64位(具体过程不详),扩展置换改变了某些位的次序,重复了某些位;
扩展置换的目的在于 与密钥位数相同,以便进行异或运算;
扩展为48位之后,便于密钥进行异或运算;
Ⅲ S盒替代
S盒替代原理,将一个数 按位拆成两个数,这两个数一个作为行数 一个作为列数,在S表(一个二维表)中找到对应的数。完成替换;
eg: 21 ——》2 1——》对应找到第二行 第一列的数(一般是化为二进制后进行拆分 为了简单,这儿就这么写了)
DES中的S盒替代略有差异:
经过S盒替代后,又变为了32位;
Ⅳ P盒替代
③逆置换
处理方式与初始置换是一样的,只是规则表不一样;
40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25,
④输出密文
DES解密
解密算法是加密算法的逆运算,不在详述;只提一点,解密过程中16轮子密钥与加密过程掌握16轮子密钥的顺序是相反的:即加密子密钥为 K1, K2,……K16;解密子密钥为K16, K15……K1;
------------------------------------------------------------AES------------------------------------------------------------------------------------------
AES加密
AES加密是对称加密、分组加密;密钥长度 分为128位、192位、256位;对应的数据分组也应该分为128位 192位 256位;这三种加密的轮次是不一样的。分别是:10、12、14
加密过程:
① 由原始数据 转为 输入state(二维矩阵 对于选择128位加密,就是4×4矩阵)
② 初始变换
就是进行轮密钥加(密钥轮加在后面介绍)
③ 循环N轮的变换
其中 N-1轮变换如下:
字节代换——》行位移——》列混淆——》轮密钥加
字节代换,就是基于S盒原理进行,上面有,不多说了!
行位移:第一行不变,第二行循环左移一个字节,第三行循环左移两个字节,第四行循环左移三个字节
列混淆:每一列的每一个字节被映射为一个新值,新值是根据这一列的值计算得出(计算方法不详)
轮密钥加:列混淆后的数据 与 密钥进行异或运算;
下面说一下每一轮的密钥是怎么来的:通过密钥扩展来的,具体不详
在第N轮,是这样的字节代换——》行位移——》轮密钥加
-----------------------------------------------------------RSA---------------------------------------------------------------------------
RSA 是不对称的加密(加密密钥和解密密钥不同 其中 一个为公钥,一个为私钥);
公钥和私钥的产生是基于一对很大的素数(十进制来说 大于100位)
首先来看 公钥和私钥的产生
①选取两个很大的素数 p、q,计算 n=p*q
②随机选取一个加密密钥e 要求,e和(p-1)*(q-1)互质 且 e<(p-1)*(q-1)
③最后 根据e p q计算解密密钥d,使得d满足 e*d= 1 (mod(p-1)(q-1)) 并且 n和d也要互质
这样 数e和n是公钥 e是私钥,p q两个则不再需要,应该丢弃,不让任何人知道;
加密方法:
首先 将加密数据分成等长的数据块 m1 m2 m3…… 每一块长度为s 使得 2^s<=n
则 mi 对应的密文 是ci = mi^e ( mod n )
解密方式 mi = ci^d ( mod n ) ( b )