最近项目中遇到了加解密的问题,然后翻阅了相关资料,成功搞定。 现在将这些知识点总结一下,一是为了以后复习,二是为了给大家提供参考。
1. 先来说说DES操作,定义我这里就不叙述了,网上一堆一堆的。接下来说一下使用时应该注意的几点。 首先,大家要分清Key(密钥),Data(待操作数据)跟Mode(加密模式)。其中Key必须为8字节(64位),Data需要是8字节(64位)的倍数,这里需要注意了,如果Data不是8字节的倍数,那么我们需要进行数据填充,数据填充使用的算法不一定相同。Mode貌似有许多种,这里只简单的说一下ECB跟CBC模式。
ECB模式:将待处理的数据分成若干块,每块的长度都为8字节(64位),与Key长度相同。然后对每块进行加密或解密,最后将他们连接在一起便是最终的结果。每一块的数据互不干扰。
CBC模式:也需要将待处理的数据分块,但是每一块数据在加密或者解密之前都要与前一块的结果做一次异或操作,因此该模式需要定义一个特殊的8字节Key,用于和第一块数据做异或操作。这个特殊的Key就是通常说的初始化向量。在代码中书写时需要配置iv参数,注意iv参数是对应CBC模式的。这样一来,每一块数据都是有联系的,这是与ECB模式不同的一点。
2. 再来说说3DES操作,也就是进行3次DES操作。设Ek()和Dk()分别代表DES算法的加密和解密过程,k代表DES算法使用的密钥,P代表明文,C代表密文,则3DES算法的过程可表示为:
C = Ek3(Dk2(Ek1(P)))
P = Dk1(Ek2(Dk3(C)))
3DES同样有ECB跟CBC模式,同上面讲的一样。这里需要注意一下Key的长度,应该是24位。比如我们已知的Key是16位的,那么我们需要将其分为2段,每一段都是8位,则k1=左8位, k2=右8位,k3=左8位,也就是 k1=k3,但不能k1=k2=k3,因为如果每段使用的Key都相同,就回到DES算法了。