iOS DES、3DES加密

简介

DES全称为Data Encryption Standard,即数据加密标准,是一种对称分组秘钥算法。

3DES是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。

3DES是DES向AES过渡的加密算法,它使用3条64位(实际只用到了56位)的密钥对数据进行三次加密,是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。

3DES重点:
1、 秘钥长度为128位(k1 == k3时)或192位,即16或24个字节组成的字符串;
2、常用ECB 和 BCB 模式加密计算。

原理
DES工作原理

DES工作原理:将数据按照8个字节一段进行加密或解密,从而得到一段8个字节的密文或者明文。再按照顺序将计算所得的数据连在一起即可。

注意:DES加密解密时要求数据长度必须为8个字节的倍数,因此当数据长度不足时必须先进行数据填充,这里使用的填充算法根据系统的不同可能略有不同。

密匙是一个64bit的数据,每八位用作奇偶校验位,实际使用到的只有56bit。

DES算法有两种工作模式,ECB(电子密本方式)和CBC(密文分组链接方式):

DES ECB:就是将数据按照8个字节一段,分别进行DES加密或解密(不足8个字节的按照需求先进行数据填充),最后按照顺序将加密或解密后的结果连在一起即可,各段数据之间互不影响。

DES CBC:在每一段加密或解密的过程中都要与前一段的结果做一次异或操作。同时CBC模式定义了一个特殊的8字节key(称为初始化向量),用以和第一段的结果做异或时用。这种机制使得加密的各段数据之间有了联系。

加密步骤如下:
1、首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据长度不是8字节的整数倍,先进行数据填充)
2、第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1
3、第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2
4、之后的数据以此类推,得到Cn
5、按顺序连为C1C2C3......Cn即为加密结果。

解密步骤如下:
1、首先将数据按照8个字节一组进行分组得到C1C2C3......Cn
2、将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意:一定是先解密再异或)
3、将第二组数据C2进行解密后与第一组密文数据进行异或得到第二组数据D2
4、之后依此类推,得到Dn
5、按顺序连为D1D2D3......Dn即为解密结果。

注意:解密的结果并不一定是我们原来的加密数据,可能还含有你补得位,一定要把补位去掉才是原来的数据。

3DES工作原理

3DES是以DES为基本模块,通过组合分组方法设计出的分组加密算法。
设Ek()和Dk()代表DES算法的加密和解密过程,
k代表DES算法使用的密钥,
P代表明文,
C代表密文,

则3DES加密解密的过程可表示为:

C=Ek3(Dk2(Ek1(P))):(用密钥1加密->用密钥2解密->用密钥3加密)

P=Dk1(Ek2(Dk3(C))):(用密钥3解密->用密钥2加密->用密钥1解密)

这里可以k1=k3,但不能k1=k2=k3(如果相等的话就成了DES算法了)

3DES with 2 diffrent keys(k1=k3),可以是3DES-CBC,也可以是3DES-ECB。3DES-CBC整个算法的流程和DES-CBC一样,但是在原来的加密或者解密处增加了异或运算的步骤,使用的密钥是16字节长度的密钥,将密钥分成左8字节和右8字节的两部分,即k1=k3=左8字节,k2=右8字节,然后进行加密运算和解密运算。

3DES with 3 different keys,和3DES-CBC的流程完全一样,只是使用的密钥是24字节的,它将密钥分为3段8字节的密钥k1,k2,k3,在3DES加密时依次使用k1、k2、k3,在3DES解密时依次使用k3、k2、k1。

总结

DES、3DES加密:数据需要进行分组,每组是8个字节,不足8个字节需要根据填充方式进行不同的填充,DES秘钥为8个字节,3DES秘钥由于k1可以等于k3,所以可以是16个字节或24个字节,ECB模式不需要偏移量iv,CBC模式等其他模式需要偏移量iv,由于偏移量iv是用来与第一组数据进行异或操作,所以长度应该和每组的长度一致,长度为8个字节。

参考

DES算法原理完整版
iOS中3DES加密算法的原理
iOS 常见加密方式 - 对称加密(3DES,AES)
对称加密算法DES、3DES原理和实现方式

你可能感兴趣的:(iOS DES、3DES加密)