标签:
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模式;
标签:
原文地址:http://my.oschina.net/u/1454202/blog/531532