AES的工作模式和填充模式

前面我们知道了AES的使用,以及ECB和GCM的工作模式。刚刚在搜索学习的过程中看到了前辈写的关于AES算法填充和工作模式,就乘着这次机会一起学习一下。

我之前觉得我一个搞软件的学这些干啥,但是其实搞清楚这些原理,看代码的时候才会更加的舒服。

1、填充方式

分组密码算法中需要将明文按指定大小进行分组,由于明文并非指定大小的整数倍,因此在明文的最后一个分组需要将其填充至加密算法所要求的分组大小后进行加密
(为什么需要填充?)

常见的填充模式有:

NoPadding
PKCS5Padding
PKCS7Padding
ISO10126Padding
ISO7816-4Padding
ZeroBytePadding
X923Padding
TBCPadding(Trailing-Bit-Compliment)
PKCS1Padding

1、NOPADDING

不填充,在此填充下原始数据必须是分组大小的整数倍,非整数倍时无法使用该模式。

2、PKCS5PADDING / PKCS7PADDING

填充至符合块大小的整数倍,填充值为填充数量数。假设每个区块大小为 blockSize:

  • 已对齐,填充一个长度为 blockSize 且每个字节均为 blockSize 的数据。
  • 未对齐,需要补充的字节个数为 n,则填充一个长度为 n 且每个字节均为 n 的数据。

PKCS7PADDING 的块大小可以为 1~255 中任意值, PKCS5PADDING 是 PKCS7PADDING 的子集,块大小只能为固定值 8 。

在标准 AES 算法中,块大小本身就为固定值 8 ,所以 PKCS7PADDING 和 PKCS5PADDING 是一样的。

填充实例:

FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07

FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF 08 08 08 08 08 08 08 08

原文为整数倍也需要填充

3、ISO10126PADDING

填充至符合块大小的整数倍,填充值最后一个字节为填充的数量数,其他字节随机处理。

FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF 3F 7A B4 09 14 36 07

4、ISO7816-4PADDING

填充至符合块大小的整数倍,填充值第一个字节为 0x80,其他字节填 0。
FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF 80 00 00 00 00 00 00

5、ZEROBYTEPADDING

填充至符合块大小的整数倍,填充值为 0。

FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00

6、X923PADDING

填充至符合块大小的整数倍,填充值最后一个字节为填充的数量数,其他字节填 0。

FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07

7、TBCPADDING(Trailing-Bit-Compliment)

填充至符合块大小的整数倍,原文最后一位为“1”时填充 0x00,最后一位为“0”时填充“0xFF”。

FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00

FF FF FF FF FF FF FF FF F0
FF FF FF FF FF FF FF FF F0 FF FF FF FF FF FF FF

8、PKCS1PADDING

该填充模式是 RSA 加密中使用的,详见 RFC 2313。RSA 加密时,需要将原文填充至密钥大小,填充的格式为:00 + BT + PS + 00 + D。

  • 00 为固定字节
  • BT 为处理模式。公钥操作时为 02,私钥操作为 00 或 01
  • PS 为填充字节,填充数量为 k - 3 - D,k 表示密钥长度,D 表示原文长度。PS 的最小长度为 8 个字节。填充的值根据 BT 值不同而不同:
    • BT = 00 时,填充全 00
    • BT = 01 时,填充全 FF
    • BT = 02 时,随机填充,但不能为 00

2、工作模式

分组密码算法只能加密固定长度为 N 比特的分组数据(DES 和 3DES 算法中 N=64,AES 算法中 N=128),若待加密数据长度 != N ,则待加密数据需要被分组或填充至长度为 N 比特的数据块用以加密,至于如何分组及填充则取决于使用的工作模式和填充方式。

前面讲了填充方式,这里看看工作模式。

早在 1981 年,DES 算法公布之后,NIST 在标准文献 FIPS 81 中公布了 4 种工作模式:

  • 电子密码本:Electronic Code Book Mode (ECB)
  • 密码分组链接:Cipher Block Chaining Mode (CBC)
  • 密文反馈:Cipher Feedback Mode (CFB)
  • 输出反馈:Output Feedback Mode (OFB)

后面又新增了一些工作模式:

  • 计数器模式:Counter Mode (CTR)
  • 填充密码分组链接:Propagating Cipher Block Chaining Mode(PCBC)

具体的详细内容链接在这里:【AES算法(四)基本工作模式】

参考资料:
https://zhuanlan.zhihu.com/p/376077687

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值