侧边栏壁纸
博主头像
Easy to understand and humorous

行动起来,活在当下

  • 累计撰写 39 篇文章
  • 累计创建 4 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

加密模式与填充模式

fengyang
2025-06-23 / 0 评论 / 0 点赞 / 10 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2025-10-19,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

摘要加密算法

摘要算法是一种能产生特殊输出格式的算法。 这种算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是摘要。 被摘要的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同。 因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。

单向算法,密文长度固定

但是,由于输出的密文是提取原数据经过处理的定长值,所以它已经不能还原为原数据,即消息摘要算法是不可逆的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用来做数据完整性验证。

如今常用的“消息摘要”算法经历了多年验证发展而保留下来的算法已经不多,这其中包括MD2、MD4、MD5、SHA、SHA-1/256/383/512等。 常用的摘要算法主要有MD5和SHA1。MD5的输出结果为16字节(128位),SHA-1 的输出结果为20字节(160位)。

常见算法:MD2、MD4、MD5 、SHA、HMAC、HMAC-MD5、HMAC-SHA1、RIPEMD160,国密SM3。

对称加密算法

对称算法使用一个密钥。 给定一个明文和一个密钥, 加密产生密文,其长度和明文大致相同。解密时,使用读密钥与加密密钥相同。

对称算法主要有四种加密模式。

常见算法:DES、3DES、AES、RC2、RC4、SM4。

非对称加密算法/公钥算法

也叫非对称加密算法, 在公钥密码系统中, 加密和解密使用的是不同的密钥,这两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密。

这使得通信双方无需事先交换密钥就可进行保密通信。 其中加密密钥和算法是对外公开的,人人都可以通过这个密钥加密文件然后发给收信者,这个加密密钥又称为公钥;而收信者收到加密文件后,它可以使用他的解密密钥解密,这个密钥是由他自己私人掌管的,并不需要分发,因此又成称为私钥,这就解决了密钥分发的问题。

常见算法:RSA、DSA、Diffie-Hellman密钥交换 和 椭圆曲线密码体制(ECC)。

分组密码和流密码

分组密码是每次只能处理特定长度的一块数据的一类密码算法,这里的“一块”就称为分组。一个分组的比特数就称为分组长度。

流密码是对数据流进行连续处理的一类密码算法。流密码一般以1比特、8比特或32比特等为单位进行加密和解密。

分组密码算法只能加密固定长度的分组,但需要加密的明文长度可能会超过分组密码的分组长度,这就需要对分组密码算法进行迭代,以便将一段很长的明文全部加密。 迭代的方法就被称为分组密码的模式。

不论是对称加密还是非对称加密, 分组密码的模式主要有以下几种:

  • ECB(电子密码本模式)
  • CBC(密码分组链接模式)
  • CFB(密文反馈模式)
  • OFB(输出反馈模式)
  • CTR(计数模式)

明文分组是指分组密码算法中作为加密对象的明文。明文分组的长度与分组密码算法的分组长度是相等的。

密文分组是指使用分组密码算法将明文分组加密之后所生成的密文。

加密模式

加密模式-ECB

Electronic codebook, 电子密码本。

这种模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同, 然后每组都用相同的密钥进行独立加密。

ECB加密

ECB解密

ECB的解密同理。不再阐述。

优点

不同明文分组的加密可以并行计算,速度很快。

缺点

电子编码薄模式用一个密钥加密消息的所有块,如果原消息中重复明文块,则加密消息中的相应密文块也会重复,因此,电子编码薄模式适于加密小消息。 因此安全性低,易攻击。

应用

  1. 用于随机数的加密保护。
  2. 用于单分组明文的加密。

ABCTF aes-mess-75


We encrypted a flag with AES-ECB encryption using a secret key, 
and got the hash: e220eb994c8fc16388dbd60a969d4953f042fc0bce25dbef573cf522636a1ba3fafa1a7c21ff824a5824c5dc4a376e75 

However, we lost our plaintext flag and also lost our key 
and we can't seem to decrypt the hash back :(. 
Luckily we encrypted a bunch of other flags with the same key. 
Can you recover the lost flag using this?

[HINT] There has to be some way to work backwards, right?

可以看出,这个加密是一个 ECB 加密,然后 AES 是 16 个字节一组,每个字节可以使用两个 16 进制字符表示, 因此,我们每 32 个字符一组进行分组,然后去对应的 txt 文件中搜索即可。

对应 flag:


e220eb994c8fc16388dbd60a969d4953 abctf{looks_like
f042fc0bce25dbef573cf522636a1ba3 _you_can_break_a
fafa1a7c21ff824a5824c5dc4a376e75 es}

最后一个显然在加密时进行了 padding。

加密模式-CBC

Cipher-block chaining, 密码分组链接。CBC模式的密文分组像链条一样相互连接在一起。 每个明文块先与前一个密文块进行异或后,再进行加密。 在这种方法中,每个密文块都依赖于它前面的所有明文块。

跟ECB方式不一样,通过连接关系,使得密文跟明文不再是一一对应的关系,破解起来更困难,而且克服了只要简单调换密文块可能达到目的的攻击。

CBC加密

CBC解密

使用CBC模式时, 在初始化Cipher对象时, 需要增加参数, 初始化向量IV : IvParameterSpec iv = new IvParameterSpec(key.getBytes());

  • IV 不要求保密
  • IV 必须是不可预测的,而且要保证完整性。

优点

  • 密文块不仅和当前密文块相关,而且和前一个密文块或 IV 相关,隐藏了明文的统计特性。
  • 具有有限的两步错误传播特性,即密文块中的一位变化只会影响当前密文块和下一密文块。
  • 具有自同步特性,即第 k 块起密文正确,则第 k+1 块就能正常解密。
  • 同样的原文生成的密文不一样

缺点

加密不能并行,解密可以并行。

CBC应用

  • 常见的数据加密和 TLS 加密。
  • 完整性认证和身份认证。

攻击

  1. 字节反转攻击
  2. Padding Oracle Attack

加密模式-CFB

CFB 全称为密文反馈模式(Cipher feedback)。

面向字符的应用程序的加密要使用流加密法,可以使用加密反馈模式。 在此模式下,数据用更小的单元加密,如可以是8位,这个长度小于定义的块长(通常是64位)。

其加密步骤是:

  1. 使用64位的初始化向量。初始化向量放在移位寄存器中,在第一步 加密,产生相应的64位初始化密文;
  2. 始化向量最左边的8位与明文前8位进行异或运算,产生密文第一部分(假设为c),然后将c传输到接收方;
  3. 向量的位(即初始化向量所在的移位寄存器内容)左移8位,使移位寄存器最右边的8位为不可预测的数据,在其中填入c的内容;
  4. 第1-3步,直到加密所有的明文单元。

解密过程相反。

CFB加密

CFB解密

优点

  • 适应于不同数据格式的要求
  • 有限错误传播
  • 自同步

缺点

加密不能并行化,解密不能并行

应用

该模式适应于数据库加密,无线通信加密等对数据格式有特殊要求的加密环境。

加密模式-OFB

OFB 全称为输出反馈模式(Output feedback),其反馈内容是分组加密后的内容而不是密文。

输出反馈模式与CFB相似,惟一差别是,CFB中密文填入加密过程下一阶段,而在OFB中,初始化向量加密过程的输入填入加密过程下一阶段。

OFB加密

OFB解密

优点

不具有错误传播特性。

缺点

  • IV 无需保密,但是对每个消息必须选择不同的 IV。
  • 不具有自同步能力。

应用

适用于一些明文冗余度比较大的场景,如图像加密和语音加密。

加密模式-CTR

特点

  • 并行性: 由于每个块都被视为一个计数器的值,不需要保持块之间的状态,因此CTR模式具有良好的并行性。
  • 计数器: 每个块都使用一个唯一的计数器值,避免了相同的明文块生成相同的密文块。

加密过程

  • 生成一个初始计数器值(Counter)和初始化向量(IV)。
  • 将计数器值与IV组合作为输入,使用AES加密算法生成伪随机流。
  • 将伪随机流与明文块进行异或运算,得到密文块。
  • 更新计数器值,继续生成伪随机流,重复以上步骤直到加密完所有的块。

填充模式

填充模式-NoPadding

  • 不填充.
  • 在DES加密算法下, 要求原文长度必须是8byte的整数倍
  • 在AES加密算法下, 要求原文长度必须是16byte的整数倍

填充模式-PKCS5Padding

数据块的大小为8位, 不够就补足。

默认方式

默认情况下, 加密模式和填充模式为 : ECB/PKCS5Padding

0

评论区