java加密与解密的艺术(二)——对称密码体制

(写在前面的话:之前负责了一个关于数据安全接入的模块,涉及到了数据的加密解密,文件校验,下载落地,入库等。在wannercry肆虐之际,更深刻体会到数据安全的重要意义。鉴于此,不才受邀在今天给团队成员统一普及了一下数据安全方面的概念,重点给Java同事分享了一下基于java的数据加密解密实现和梁栋的《java加密与解密的艺术》。有感于这次的wannercry风暴,特将今天的培训整理出来和大家分享一下,诚邀勘误指正。 培训资料:参考了梁栋的《java加密与解密的艺术》,大家也可以自行买这本书阅读,应该感谢梁栋为我们提供了一本好书。)


一、对称加密算法

       对称加密算法的最大特征就是加密和解密的秘钥相同。


两大算法模型:1、流密码;2、分组密码


1、流密码(按字节或字符加密)

         流密码又分为同步流密码(产生秘钥序列的算法和明文密文无关)和自同步流密码(产生秘钥序列的算法和之前的密文有关)。


1.1、同步流密码

扫描二维码关注公众号,回复: 480331 查看本文章

  • 只要通信双方的秘钥生成器的“种子秘钥”和“初始向量”一致,则生成的秘钥相同
  • 解密过程需要通信双方保持精确同步
  • 容易检测插入,删除、重播等主动攻击
  • 没有差错传播
1.2、自同步流密码

  • 秘钥流(序列)是有记忆变换器
  • 秘钥流与明文有关:i 时刻的密文不仅与 i 时刻的明文有关,而且还与 i 时刻之前的 l 长度的明文有关
  • 具有差错传播,但该差错是有限的
  • 具有自同步的能力
  • 明文的一个字符扩散在密文的多个字符中,抗统计分析能力增强

2、分组密码(按固定长度分组加密)

2.1、概述
分组加密是将明文数据分成等长的分组,通过秘钥分别变换得到等长的密文分组的过程。最后一组长度不足的情况下,采用特殊符号填充的方式解决。
  • 明文和密文组长度为 n,秘钥长度为 t,秘钥量为 2 的 t 次方
  • 密文中的任意一个数字与该组明文中的所有数字均相关(扩散)
  • 每一组明文都采用同一个秘钥加密


2.2、分组密码的工作模式


2.2.1、电子本模式(ECB, electronic codebook mode

      每一组明文都与唯一的一组密文相对应。
20131030092800558.jpg (800×169)
缺点是相同明文组的密文也相同,从而造成规律性的明文在密文中也呈现出规律性,从而降低了抗统计学攻击性。
好处是不同组之间彼此独立,某一个分组的错误不会扩散至其他分组,没有错误传播。但如果某一组的数据出现了位数丢失或增加,则会造成整个数据的解析失败。

  • 简单;
  • 有利于并行计算
  • 误差不会被传送
  • 暴露明文的模式(明文的规律性数据会体现在密文中)
  • 可能对明文进行主动攻击


2.2.2、密码分组链接模式(CBC,cipher block chaining mode
  • 组与组之间存在某种运算关联,即采用密码学中的混淆思想(组两两之间做了数据绑定)
  • 这样有效规避了明文中的规律数据
  • 链式从某种意义上说可防止了数据的篡改
  • 链式一般是相邻组关联相关,因此某一组的错误传播一般只放大到两个组,即错误传播的有限性
  • 不容易主动攻击
  • 安全性好于ECB
  • 适合传输长度长的报文,SSLIPSec的标准
  • 不利于并行计算
  • 误差传递
  • 需要初始化向量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加密算法

















猜你喜欢

转载自blog.csdn.net/stefan_xiepj/article/details/72457496