对称算法一般分为流加密(按照单个bit位或byte字节进行运算)和块加密(根据特定长度分块进行运算)两种类型。
对称加解密中,当需要分块处理数据,数据长度不符合密码规范定义的分组数据包要求时,我们需要按一定的方法填充分组数据包长度,使其满足一定的规则要求。
常见的对称算法基本都属于块加密算法,它们的分块长度也不同:
- 8字节:DES算法、3DES算法
- 16字节:AES算法、SM1算法、SSF33算法、SM4算法、SM6算法
- 不填充(原文必须是8个字节的整数倍)
- DES加密算法时,要求原文数据长度必须是8个字节的整数倍
- AES加密算法时,要求原文数据长度必须是16个字节的整数倍
- 分组数据包的大小为8个字节的倍数,不够就填充补足。
一种基于口令的加密标准(PKCS#5)中定义的填充模式。若数据长度L,对称算法的分块长度B,则需填充B-(L%B)个字节的B-(L%B)。
如使用SM1加密9个字节的数据,此时L=9,B=16,则需填充7个字节的0x07;若L=16,则需填充16个字节的0x10。
填充前:0x12 0x34 0x56 0x78 0x90 0xab 0xcd 0xef 0x01
填充后:0x12 0x34 0x56 0x78 0x90 0xab 0xcd 0xef 0x01 0x07 0x07 0x07 0x07 0x07 0x07 0x07(填充7个0x07)
- 默认情况下,加密模式和填充模式为:ECB/PKCS5Padding
- CBC模式时,在初始化Cipher对象时,需要增加参数,初始化向量IV:IvParameterSpec Iv = new IV:IvParameterSpec(key.getBytes());
热门文章
- python 可变参数 关键字参数_python函数参数(可变参数tuple和关键字参数list)
- 宠物领养需要花钱吗多少钱(宠物领养需要花钱吗多少钱一个月)
- 「4月6日」最高速度21.9M/S,2025年SSR/Clash/Shadowrocket/V2ray每天更新免费机场订阅链接
- Java中输入与输出的方法总结_java_
- 宠物领养市场需求分析论文(宠物领养项目计划书)
- 十大品牌兽药厂家 十大品牌兽药厂家是哪些
- 动物疫苗经营许可证图片 动物疫苗经营许可证图片大全
- 兽用疫苗保质期多久(兽用疫苗常温下能放多久)
- 猫养小猫要多长时间(小猫养多久才能生小猫)
- Laravel学习三:路由以及跳转和重定向用法总结