分组加密中的填充介绍(PKCS1Padding / PKCS5Padding/ISO10126Padding)

分组加密中的填充介绍(PKCS1Padding / PKCS5Padding/ISO10126Padding)

在玩Cipher的时候,其中创建Cipher对象的时候需要指定加密模式,指定为对称加密中的分组算法时,因为加密是以 为单位进行一次加密,所以要求数据是块的整数倍,如果不符合要求,则需要进行填充

Public Key Cryptography Standards, PKCS,公钥加密标准,是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议

常见的填充方式有以下几种:(例如块大小为 8bytes,数据不足,需要填充)

1、 填充数据为填充字节的长度

这种填充方式中,填充的所有字节值都为需要填充字节的长度

例如:现在有3bytes,块大小为8bytes,需要填充5bytes,即以5来填充

原数据:66 6F 72

填充后的数据:66 6F 72 05 05 05 05 05

2、 填充数据为0x80后加0x00

这种填充方式中,填充字符串的第一个字节数是0x80,后面的每个字节是0x00

假如:现在有3bytes,块大小为8bytes,需要填充5bytes,则第一个为 80,后面的全部为 00

原数据:66 6F 72

填充后的数据:66 6F 72 80 00 00 00 00

3、填充数据的最后一个字节为填充字节序列的长度

这种填充方式中,填充字符串的最后一个字节为填充字节的长度, 其它为0×00

假如:现在有3bytes,块大小为8bytes,需要填充5bytes,则最后一个为 05,其他全部为 00

原数据:66 6F 72

填充后的数据:66 6F 72 00 00 00 00 05

4、填充数据为0x00

这种填充方式中,填充的所有字节值都为0x00

假如:现在有3bytes,块大小为8bytes,需要填充5bytes,则填充的全部为 00

原数据:66 6F 72

填充后的数据:66 6F 72 00 00 00 00 00

5、填充数据为空格(0x20)

这种填充方式中,填充的所有字节值都为空格0x20

假如:现在有3bytes,块大小为8bytes,需要填充5bytes,则填充的全部为 20

原数据:66 6F 72

填充后的数据:66 6F 72 20 20 20 20 20

在Cipher选择填充的时候,可选择以下几种:

  • ISO10126Padding
  • OAEPPadding / OAEPWithAndPadding
  • PKCS1Padding / **PKCS5Padding **
  • SSL3Padding

1 、ISO10126Padding(最常用)对应上面的 填充数据的最后一个字节为填充字节序列的长度

这种填充方式中,填充字符串的最后一个字节为填充字节的长度, 其它为0×00

假如:现在有3bytes,块大小为8bytes,需要填充5bytes,则最后一个为 05,其他全部为 00

原数据:66 6F 72

填充后的数据:66 6F 72 00 00 00 00 05

2、PKCS5Padding(对称加密最常用):将数据填充到8的倍数,填充数据计算公式是,假如原数据长度为len,利用该方法填充后的长度是 len + (8 - (len % 8)), 填充的数据长度为 8 - (len % 8),块大小固定为8字节,填充方式为上面的 填充数据为填充字节的长度

3、PKCS7Padding(对称加密最常用):假设需要填充n (n>0) 个字节才对齐,填充n个字节,每个字节都是n ;如果数据本身就已经对齐了,则填充一块长度为块大小的数据,每个字节都是块大小;PKCS7填充字节的范围在 **1-255 **之间 ,填充方式为上面的 填充数据为填充字节的长度

4、PKCS1Padding (RSA加密最常用)

PKCS#1(v1.5)中规定,如果使用PKCS1Padding进行填充,当RSA的密钥长度是1024b,则原文数据最多117B。若原数据不满足长度要求,则需要在加密前进行填充,填充公式为:

EB = 00 || BT || PS || 00 || D :

  • EB :填充后的数据
  • D :原消息数据
  • BT:The block type 块类型,取值为 00 or 01 (私钥运算时),取值为 02 (公钥运算时)
  • PS:The padding string填充字符串,长度为 Len(EB) - 3 - Len(D),最少是 8字节
    • BT=00,PS为00
    • BT=01,PS为FF
    • BT=02,PS为伪随机生成,非零

5、OAEPPadding:与PKCS1Padding类似,但是数据加密前的编码方式不一样

6、SSL3Padding

填充方案与PKCS5Padding类似(但不完全相同),其中填充长度在填充中编码(范围从1到块_长度

其中 sizeof(内容)+ sizeof(MAC)% 块长度 = 0

padding 必须是(block_length-1)字节长

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值