要理解3DES,就必须先搞懂什么是DES。DES是美国一种由来已久的加密标准,它的工作原理是将数据按照8个字节一段进行加密或解密,从而得到一段8个字节的密文或者明文。之后按照顺序将计算所得的数据连在一起即可。这里需要注意的是,由于DES加密解密时要求数据长度必须为8个字节的倍数,因此当数据长度不足时必须先进行数据填充,这里使用的填充算法根据系统的不同可能会略有不同。
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即为解密结果。
这里注意一点,解密的结果并不一定是我们原来的加密数据,可能还含有你补得位,一定要把补位去掉才是你的原来的数据。
OK,最后我们来说说3DES。3DES又称Triple DES,顾名思义就是三次DES算法。比起最初的DES,3DES更为安全。它是以DES为基本模块,通过组合分组方法设计出的分组加密算法。设Ek()和Dk()代表DES算法的加密和解密过程,k代表DES算法使用的密钥,P代表明文,C代表密文,则3DES加密解密的过程可表示为:
C=Ek3(Dk2(Ek1(P)))
P=Dk1(Ek2(Dk3(C)))
这里可以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。