java加密与解密的艺术(二)——对称密码体制
2017-05-18 09:31
477 查看
(写在前面的话:之前负责了一个关于数据安全接入的模块,涉及到了数据的加密解密,文件校验,下载落地,入库等。在wannercry肆虐之际,更深刻体会到数据安全的重要意义。鉴于此,不才受邀在今天给团队成员统一普及了一下数据安全方面的概念,重点给Java同事分享了一下基于java的数据加密解密实现和梁栋的《java加密与解密的艺术》。有感于这次的wannercry风暴,特将今天的培训整理出来和大家分享一下,诚邀勘误指正。
培训资料:参考了梁栋的《java加密与解密的艺术》,大家也可以自行买这本书阅读,应该感谢梁栋为我们提供了一本好书。)
一、对称加密算法
对称加密算法的最大特征就是加密和解密的秘钥相同。
两大算法模型:1、流密码;2、分组密码
1、流密码(按字节或字符加密)
流密码又分为同步流密码(产生秘钥序列的算法和明文密文无关)和自同步流密码(产生秘钥序列的算法和之前的密文有关)。
1.1、同步流密码
只要通信双方的秘钥生成器的“种子秘钥”和“初始向量”一致,则生成的秘钥相同
解密过程需要通信双方保持精确同步
容易检测插入,删除、重播等主动攻击
没有差错传播
1.2、自同步流密码
秘钥流(序列)是有记忆变换器
秘钥流与明文有关:i 时刻的密文不仅与 i 时刻的明文有关,而且还与 i 时刻之前的 l 长度的明文有关
具有差错传播,但该差错是有限的
具有自同步的能力
明文的一个字符扩散在密文的多个字符中,抗统计分析能力增强
2、分组密码(按固定长度分组加密)
2.1、概述
分组加密是将明文数据分成等长的分组,通过秘钥分别变换得到等长的密文分组的过程。最后一组长度不足的情况下,采用特殊符号填充的方式解决。
明文和密文组长度为 n,秘钥长度为 t,秘钥量为 2 的 t 次方
密文中的任意一个数字与该组明文中的所有数字均相关(扩散)
每一组明文都采用同一个秘钥加密
2.2、分组密码的工作模式
2.2.1、电子本模式(ECB,electronic codebook mode)
每一组明文都与唯一的一组密文相对应。
缺点是相同明文组的密文也相同,从而造成规律性的明文在密文中也呈现出规律性,从而降低了抗统计学攻击性。
好处是不同组之间彼此独立,某一个分组的错误不会扩散至其他分组,没有错误传播。但如果某一组的数据出现了位数丢失或增加,则会造成整个数据的解析失败。
简单;
有利于并行计算
误差不会被传送
暴露明文的模式(明文的规律性数据会体现在密文中)
可能对明文进行主动攻击
2.2.2、密码分组链接模式(CBC,cipher block chaining mode)
组与组之间存在某种运算关联,即采用密码学中的混淆思想(组两两之间做了数据绑定)
这样有效规避了明文中的规律数据
链式从某种意义上说可防止了数据的篡改
链式一般是相邻组关联相关,因此某一组的错误传播一般只放大到两个组,即错误传播的有限性
不容易主动攻击
安全性好于ECB
适合传输长度长的报文,是SSL、IPSec的标准
不利于并行计算
误差传递
需要初始化向量IV
2.2.3、密码反馈模式(CFB,cipher feedback mode)
同步序列密码,整个数据分组在接受完成之后才能开始加密。每次加密不再是整个分组长,而是分组中的 s 大小比特,并且每次加密之后的密文结果并不是直接耦合到明文,而是反馈给加密算法的输入端——开环移位寄存器中,从而间接地达到“下一组明文依赖于上一组密文的效果”。
具有CBC模式的优点
无需对数据格式进行改变
对错误敏感且会有限传播(仅当错误密文比特从开环移位寄存器中)
加密效率低
隐藏了明文模式
分组密码转化为流密码
可以及时加密传送小于分组的数据
不利于并行计算
误差传送:一个明文单元损坏影响多个单元
唯一的IV
2.2.4、输出反馈模式(OFB,output feedback mode)
输出反馈模式是密码反馈模式的改进,最大的区别是:密码反馈模式是将密文反馈给了开环移位寄存器,而输出反馈模式是将秘钥生成器的秘钥结果反馈给开环移位寄存器。
OFB模式实质上就是一个同步流密码,通过反复加密一个初始向量IV来得到密钥流。这种方法有时也叫“内部反馈”,因为反馈机制独立于明文和密文而存在的。
隐藏了明文模式
分组密码转化为流模式
可以及时加密传送小于分组的数据
不利于并行计算
对明文的主动攻击是可能的
误差传送:一个明文单元损坏影响多个单元
2.2.5、计数器模式(CTR,counter mode)
CBC模式和和CFB模式不能以随机顺序来访问加密的数据,因为秘钥流的产生是依赖于前面的秘钥流,当前密文数据块的解密依赖于前面的密文块。
计数器模式的秘钥流不再彼此依赖,而是通过计数器来提供。
访问随机性
高效率
处理的数据长度任意
二、经典的对称加密算法
DES加密算法,AES加密算法
培训资料:参考了梁栋的《java加密与解密的艺术》,大家也可以自行买这本书阅读,应该感谢梁栋为我们提供了一本好书。)
一、对称加密算法
对称加密算法的最大特征就是加密和解密的秘钥相同。
两大算法模型:1、流密码;2、分组密码
1、流密码(按字节或字符加密)
流密码又分为同步流密码(产生秘钥序列的算法和明文密文无关)和自同步流密码(产生秘钥序列的算法和之前的密文有关)。
1.1、同步流密码
只要通信双方的秘钥生成器的“种子秘钥”和“初始向量”一致,则生成的秘钥相同
解密过程需要通信双方保持精确同步
容易检测插入,删除、重播等主动攻击
没有差错传播
1.2、自同步流密码
秘钥流(序列)是有记忆变换器
秘钥流与明文有关:i 时刻的密文不仅与 i 时刻的明文有关,而且还与 i 时刻之前的 l 长度的明文有关
具有差错传播,但该差错是有限的
具有自同步的能力
明文的一个字符扩散在密文的多个字符中,抗统计分析能力增强
2、分组密码(按固定长度分组加密)
2.1、概述
分组加密是将明文数据分成等长的分组,通过秘钥分别变换得到等长的密文分组的过程。最后一组长度不足的情况下,采用特殊符号填充的方式解决。
明文和密文组长度为 n,秘钥长度为 t,秘钥量为 2 的 t 次方
密文中的任意一个数字与该组明文中的所有数字均相关(扩散)
每一组明文都采用同一个秘钥加密
2.2、分组密码的工作模式
2.2.1、电子本模式(ECB,electronic codebook mode)
每一组明文都与唯一的一组密文相对应。
缺点是相同明文组的密文也相同,从而造成规律性的明文在密文中也呈现出规律性,从而降低了抗统计学攻击性。
好处是不同组之间彼此独立,某一个分组的错误不会扩散至其他分组,没有错误传播。但如果某一组的数据出现了位数丢失或增加,则会造成整个数据的解析失败。
简单;
有利于并行计算
误差不会被传送
暴露明文的模式(明文的规律性数据会体现在密文中)
可能对明文进行主动攻击
2.2.2、密码分组链接模式(CBC,cipher block chaining mode)
组与组之间存在某种运算关联,即采用密码学中的混淆思想(组两两之间做了数据绑定)
这样有效规避了明文中的规律数据
链式从某种意义上说可防止了数据的篡改
链式一般是相邻组关联相关,因此某一组的错误传播一般只放大到两个组,即错误传播的有限性
不容易主动攻击
安全性好于ECB
适合传输长度长的报文,是SSL、IPSec的标准
不利于并行计算
误差传递
需要初始化向量IV
2.2.3、密码反馈模式(CFB,cipher feedback mode)
同步序列密码,整个数据分组在接受完成之后才能开始加密。每次加密不再是整个分组长,而是分组中的 s 大小比特,并且每次加密之后的密文结果并不是直接耦合到明文,而是反馈给加密算法的输入端——开环移位寄存器中,从而间接地达到“下一组明文依赖于上一组密文的效果”。
具有CBC模式的优点
无需对数据格式进行改变
对错误敏感且会有限传播(仅当错误密文比特从开环移位寄存器中)
加密效率低
隐藏了明文模式
分组密码转化为流密码
可以及时加密传送小于分组的数据
不利于并行计算
误差传送:一个明文单元损坏影响多个单元
唯一的IV
2.2.4、输出反馈模式(OFB,output feedback mode)
输出反馈模式是密码反馈模式的改进,最大的区别是:密码反馈模式是将密文反馈给了开环移位寄存器,而输出反馈模式是将秘钥生成器的秘钥结果反馈给开环移位寄存器。
OFB模式实质上就是一个同步流密码,通过反复加密一个初始向量IV来得到密钥流。这种方法有时也叫“内部反馈”,因为反馈机制独立于明文和密文而存在的。
隐藏了明文模式
分组密码转化为流模式
可以及时加密传送小于分组的数据
不利于并行计算
对明文的主动攻击是可能的
误差传送:一个明文单元损坏影响多个单元
2.2.5、计数器模式(CTR,counter mode)
CBC模式和和CFB模式不能以随机顺序来访问加密的数据,因为秘钥流的产生是依赖于前面的秘钥流,当前密文数据块的解密依赖于前面的密文块。
计数器模式的秘钥流不再彼此依赖,而是通过计数器来提供。
访问随机性
高效率
处理的数据长度任意
二、经典的对称加密算法
DES加密算法,AES加密算法
相关文章推荐
- java加密与解密的艺术(三)——非对称密码体制
- 通过代理截取并修改非对称密钥加密信息 加密、解密算法总的来说可以分称对称密钥加密以及非对称密钥加密算法。 对称密钥加密算法要求加密和解密都用同一把密钥。这可能是对称密码体制的主要弱点(为了让对方能够
- java 对称加密——基于口令的加密与解密
- java密码的加密与解密(3des)
- java代码实现对excel加密、解密(设置或去除打开密码)
- 有关java对压缩文件的加密(通过密码解密)
- java 简单的字节流与字符串的转换换 及加密与解密(对称)
- Java加密与解密的艺术 笔记一
- Java加密与解密的艺术-读书笔记3-4章
- 密码学1——Java 加密解密基础
- [JAVA加解密]实例:对称加密网络应用DataServer
- js java 密码的rsa加密解密配合
- java DES ECB模式对称加密解密
- Java DES算法加密解密与AES密码算法
- Java加密与解密的艺术-Base64
- 【转】 java DES ECB模式对称加密解密
- java加密解密研究1、密码学的基本分类
- Java加密/解密之对称加密
- 【java密码加密与解密】
- Hill密码加密解密java代码