对称加密的数据填充算法

一,介绍

在使用AES和DES等对称加密算法时,待加密的数据可能不是一个完整的数据块(比如8字节一个块,或者16字节一个块), 那么就需要进行填充(padding)。

常见的填充算法包括:ISO9797_M1、ISO9797_M2和PKCS5。

不同的填充算法的规则和填充字符不一样,需要明确下来,不然解密的时候就会出问题。

二,ISO9797_M1

1,DES

规则:

8字节为一块,块对齐才可以加密。

如果数据的长度不够8的倍数,则在数据后面补0x00,直到数据长度满足8的倍数。

如果数据长度已经满足8的倍数,则需要在数据后面再补8字节的0x00。

填充前 D5 37 11 F4 C8
填充后 D5 37 11 F4 C8 00 00 00
……
填充前 D5 37 11 F4 C8 A1 66 8D
填充后 D5 37 11 F4 C8 A1 66 8D 00 00 00 00 00 00 00 00

2,AES

规则:

  • 16字节为一块,块对齐才可以加密。
  • 如果数据长度不够16的倍数,则在数据后面补0x00,直到数据长度满足16的倍数。
  •  如果数据长度已经满足16的倍数,则需要在数据后面再补16字节的0x00。

填充前 D5 37 11 F4 C8 C6 71 23 45 C7 25 37 C1 D2
填充后 D5 37 11 F4 C8 C6 71 23 45 C7 25 37 C1 D2 00 00
……
填充前 D5 37 11 F4 C8 C6 71 23 45 C7 25 37 C1 D2 E3 C9
填充后 D5 37 11 F4 C8 C6 71 23 45 C7 25 37 C1 D2 E3 C9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

三,ISO9797_M2算法

1, DES

规则:

  • 8字节为一块,块对齐才可以加密。
  • 如果数据长度不够8的倍数,则在后面补一个字节0x80,如果补了之后数据长度满足8的倍数,则填充完成, 但是如果补了一个字节0x80之后,数据长度还不满足8的倍数的话,那么后续接着补0x00,直到数据长度满足8的倍数。
  • 如果数据长度一开始就满足8的倍数,则需要在后面再补一字节0x80和7字节0x00。

填充前 D5 37 11 F4 C8 A1 66
填充后 D5 37 11 F4 C8 A1 66 80

填充前 D5 37 11 F4 C8
填充后 D5 37 11 F4 C8 80 00 00

填充前 D5 37 11 F4 C8 A1 66 8D
填充后 D5 37 11 F4 C8 A1 66 8D 80 00 00 00 00 00 00 00

2, AES

规则:

  • 16字节为一块,块对齐才可以加密。
  • 如果数据长度不够16的倍数,则在后面补一个字节0x80,如果补了之后数据长度满足16的倍数,则填充完成。 但是如果补了一个字节0x80之后,数据长度还不满足16的倍数的话,那么后续接着补0x00,直到数据长度满足16的倍数。
  • 如果数据长度一开始就满足16的倍数,则需要再后面再补一字节0x80和15字节0x00。

填充前 D5 37 11 F4 C8 A1 66 12 5C 27 9C 2D 19 4A 92
填充后 D5 37 11 F4 C8 A1 66 12 5C 27 9C 2D 19 4A 92 80

填充前 D5 37 11 F4 C8 A1 66 12 5C 27 9C 2D 19
填充后 D5 37 11 F4 C8 A1 66 12 5C 27 9C 2D 19 80 00 00

填充前 D5 37 11 F4 C8 A1 66 12 5C 27 9C 2D 19 4A 92 3C
填充后 D5 37 11 F4 C8 A1 66 12 5C 27 9C 2D 19 4A 92 3C 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

四,PKCS5算法

全名叫PKCS5Padding

1,DES

规则:

  • 8字节为一块,块对齐才可以加密。
  • 如果数据长度不够8的倍数,还差N个数据,则在数据后面补N个字节的N。
  • 如果数据长度满足8的倍数,则填充8字节的0x08。

填充前 D5 37 11 F4 C8
填充后 D5 37 11 F4 C8 03 03 03

填充前 D5 37 11 F4 C8 A1 66
填充后 D5 37 11 F4 C8 A1 66 01

填充前 D5 37 11 F4 C8 A1 66 8D
填充后 D5 37 11 F4 C8 A1 66 8D 08 08 08 08 08 08 08 08

2,AES

规则:

  • 16字节为一块,块对齐才可以加密。
  • 如果数据长度不够16的倍数,还差N个数据,则在数据后面补N个字节的N。
  • 如果数据长度满足16的倍数,则填充16字节的0x10。

填充前 D5 37 11 F4 C8
填充后 D5 37 11 F4 C8 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B

填充前 D5 37 11 F4 C8 A1 66 33 15 8A 99 D2 C8
填充后 D5 37 11 F4 C8 A1 66 33 15 8A 99 D2 C8 03 03 03


填充前 D5 37 11 F4 C8 A1 66 33 15 8A 99 D2 C8 2D C1
填充后 D5 37 11 F4 C8 A1 66 33 15 8A 99 D2 C8 2D C1 01

填充前 D5 37 11 F4 C8 A1 66 33 15 8A 99 D2 C8 2D C1 2E
填充后 D5 37 11 F4 C8 A1 66 33 15 8A 99 D2 C8 2D C1 2E 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10

整理不易,记得点赞关注收藏哟!

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东皋长歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值