3DES算法加解密介绍
2015-11-17 00:00
211 查看
摘要: 本文主要做一个简介,记录一下,大部分内容都是转载的。
.net默认的加密方式并不会显示的写在代码中,对应的java为DESede/CBC/PKCS5Padding
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
CBC由于加入了向量参数,一定程度上抵御了字典工具,但缺点也随之而来,一旦中间一个数据出错或丢失,后面的数据将受到影响;
CFB与CBC类似,好处是明文和密文不用是8bit的整数倍,中间一个数据出错,只影响后面的几个块的数据;
OFB比CFB方式,一旦一个数据出错,不会影响后面的数据,但安全性降低;
因此,推荐使用CFB方式,但每个数据包单独加密,否则一个数据包丢失,需要做很多容错处理;
当然,具体问题也要具体分析,对于只需要”特定安全性”①,不需要”计算安全性”以上的软件,也可以使用ECB模式;
.net默认的加密方式并不会显示的写在代码中,对应的java为DESede/CBC/PKCS5Padding
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模式;
相关文章推荐
- PHP MySQL应用中使用XOR运算加密算法分享
- php加密算法之实现可逆加密算法和解密分享
- JavaScript SHA512&SHA256加密算法详解
- php对称加密算法示例
- PHP中对各种加密算法、Hash算法的速度测试对比代码
- java不可逆加密算法之md5加密算法使用示例
- 分享Java常用几种加密算法(四种)
- python使用rsa加密算法模块模拟新浪微博登录
- 数字证书
- IBM的MARS加密算法实现
- android 加密
- 3DES加密和解密的实例
- Java、Android和iPhone 3DES加密
- BASE64、MD5、SHA、HMAC几种加密算法
- JAVA基础 浅谈3DES加密解密
- 【Android工具类】比DES加密更安全的算法——3DES加密算法
- Java Base64、AES、SHA1、MD5加密算法
- 我写的一个加密算法(未验证-后续)
- android java 3des加密 ECB/CBC
- 3DES