3DES算法加解密介绍

3DES:

3DES加密就是DES的加强版,三重加密。将192位密钥分成三段,每段64位,除去8位奇偶校验,剩下56位用来加密。

数据补位:

加密时,将数据按照8个字节一段进行加密,这就出现最后一段不足8个字节的问题,所以会补足8位。

补位有多种方式:

java中常用的 PKCS5Padding.net 常用PKCS7是将将需要填充的长度作为值

例子 数据长度为9,所以需要拆成两个8,缺少7位

数据     AA AA AA AA AA AA AA AA    AA 

填充后: AA AA AA AA AA AA AA AA    AA  07 07 07 07 07 07 07 07

一般.net PKCS7=java PKCS5Padding

还有补0的,zero padding和很多。

加密模式:

ECB:java默认的加密模式,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字节进行计算,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。

CBC:.net默认的加密模式,新增一个初始化向量iv,使得加密结果更加安全。

加密步骤如下:

1)首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据不是8的整数倍,用指定的PADDING数据补位)

2)第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1(初始化向量I为全零)

3)第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2

4)之后的数据以此类推,得到Cn

5)按顺序连为C1C2C3......Cn即为加密结果。

异或(同为0 异为1  1100+1011=0111)


还有CFB和OFB


互联网程序中加密模式的使用:

     ECB是不推荐的方式,Key相同时,相同的明文在不同的时候产生相同的明文,容易遭到字典攻击;

     CBC由于加入了向量参数,一定程度上抵御了字典工具,但缺点也随之而来,一旦中间一个数据出错或丢失,后面的数据将受到影响;

     CFB与CBC类似,好处是明文和密文不用是8bit的整数倍,中间一个数据出错,只影响后面的几个块的数据;

     OFB比CFB方式,一旦一个数据出错,不会影响后面的数据,但安全性降低;

     因此,推荐使用CFB方式,但每个数据包单独加密,否则一个数据包丢失,需要做很多容错处理;

     当然,具体问题也要具体分析,对于只需要”特定安全性”①,不需要”计算安全性”以上的软件,也可以使用ECB模式;



你可能感兴趣的:(3des,加密算法)