加解密算法
加密算法分
对称加密(加密与解密密钥相同):加解密的过程是可逆的。算法主要有
- DES(Data Encryption Standard):以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法
- DES算法的入口参数有三个:
- Key:8个字节共64位,是DES算法的工作密钥;
- Data:8个字节64位,是要被加密或被解密的数据;
- Mode:DES的工作方式,有两种:加密或解密 。
- 加密总过程(图1)
- 初始置换得到IP:将64 bit明文的各行比特经过偶采样和奇采样置换后,再对各列进行逆序。得到的64 bit明文组(图2),而后分成左右两段,每段为32bit,以L0和R0表示
- 乘积变换:此步骤需要经历16轮,而且每一轮变换都需要一个48bit子密钥,共需要16个48bit密钥。每次迭代时只对右边的32 bit进行一系列的加密变换,在此轮迭代即将结束时,把左边的32 bit与右边得到的32bit做异或运算,作为下一轮迭代时右边的段,并将原来右边的段直接送到左边的寄存器中作为下一轮迭代时左边的段。具体地,f运算包括:
- 选择扩展运算E:对32 bit Ri-1第1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 28, 29,32各位都重复一次,扩展成48 bit的输出(图3)
- 子密钥产生算法(图4):
- 奇偶校验:实际上函数要求一个64位的密钥作为输入,但是第8、16、24、32、40、48、56、64 等8位是校验位, 校验每个密钥是否都有奇数个 1,所以参与加密过程的只有56位
- 置换1:将56比特密钥K’各位上的数按规定方式进行换位。置换后的56bit分别存到两个28bit的寄存器中(图5)。
- 循环左移:每个寄存器都有28比特,加密时,循环寄存器对C(i+1)、D(i+1)的内容是将循环寄存器对C(i)、D(i)的内容分别左移1至2位得到的。各级寄存器移位的比特数如下图6所示。
- 压缩置换:从56bit的数据中选出48bit,压缩置换表如下图7所示。
- 选择压缩算法S:将48bit数据与48bit密钥做异或运算,获得的48比特数据从左至右分成8组,每组为6比特,然后并行送入8个S盒。8个S盒的工作原理都是一样,为一个非线性替换运算。每个S盒都是一个4行、16列的矩阵,每行都是0到15的数字。每个S盒有6位输入,4位输出,6位输入中的第1位和第6位数字组成的二进制数值决定置换矩阵的行数,其余4位数字所组成的二进制数值决定置换矩阵的列数,行数和列数交点的数字便是S盒的输出。例如,S1盒信息(图8),假设S1盒的输入110010, 因第1位和第6位数字组成的二进制数为10=(2)10,他对应S1行号为2的那一行,其余4位数字所组成的二进制数为1001=(9)10,对应S1列号为9的那一列,交点处的数是12,则S1的输出为1100。
- 置换运算P:对S1至S8盒输出的32 bit数据进行坐标置换(图9)
- 逆初始置换IP-1:它的作用打乱重排第十六次加密迭代的结果然后形成64位密文,是初始置换IP的逆置换,置换矩阵如下图10所示。至此,加密结束。
- 数据解密过程:DES的解密运算可以和加密运算用同一个算法,但它们使用子密钥的顺序是相反的。将64位的密码作为明文输入进去,K16作为第一次的解密迭代子密钥来使用,K15作为第二次的解密迭代使用,…,一直到K1作为最后一次(即第十六次)的解密迭代子密码,然后输出的就是64位明文了。
- DES算法的入口参数有三个:
- 3DES:是基于 DES 的 对称算法,对 一块数据 用 三个不同的密钥 进行 三次加密,强度更高。
- AES(Advanced Encryption Standard) :为了取代 DES 的,AES 具有更好的安全性、效率和灵活性。分组长度128位,密钥长度的最少支持为128位、192位、256位,相应的迭代轮数为10轮、12轮、14轮。
非对称加密(加密密钥与解密密钥不同):它需要公钥和私钥。
-
如果使用 公钥 对数据 进行加密,只有用对应的 私钥 才能 进行解密。
-
如果使用 私钥 对数据 进行加密,只有用对应的 公钥 才能 进行解密。(数字签名)
算法 主要有
- RSA:是目前最有影响力的公钥加密算法,能同时用于 加密 和 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击。算法描述:
- 足够大的素数p,q。(对两个大素数的乘积进行因式分解极其困难)
- 计算n=pq。
- 计算f(n)=(p-1)(q-1),同时对p, q严加保密,不让任何人知道。
- 找一个与f(n)互质的数e,且1<e<f(n)。
- 计算d,使得de≡1 mod f(n)。这个公式也可以表达为d ≡e-1 mod f(n) 注:≡是同余的符号
- 公钥KU=(e,n),私钥KR=(d,n)。
- 加密时,先将明文变换成0至n-1的一个整数M(如26个英文字母可以对应01-26)。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:C≡Me(mod n)
- 解密过程为:M≡Cd(mod n)。
- DSA
散列:不需要密钥,加解密的过程不可逆。算法主要有
- MD5:用的是哈希函数,对一段信息产生信息摘要,无论是多长的输入,MD5 都会输出长度为128bits的一个串
-
SHA1 :SHA1 比 MD5 的安全性更强。对于长度小于 2 ^ 64 位的消息,SHA1 会产生一个 160 位的消息摘要。基于 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被应用在检查 文件完整性 以及 数字签名 等场景。
对称算法 | 非对称算法 | |
密钥管理 | 难,不适合互联网,一般用于内部系统 | 易 |
安全性 | 中 | 高 |
加密速度 | 快好几个数量级,适合大数据量的加解密处理 | 比较慢,适合小数据量 加解密或数据签名 |
附图
图1
图2
图3
图4
图5
图6
图7
图8
图9
图10