安全算法数据填充之PKCS7填充规则

2022-09-03 14:17:46

安全算法数据填充之PKCS7填充规则


安全芯片本身支持各种标准的加密算法,用户可以使用相应的算法完成数据的加解密、签名验签等功能来完善自己产品的安全性。在数据加解密应用中,数据填充又是其中重要的组成部分。数据填充通常有两个作用一是按要求将数据补足到要就的块长度来满足加密算法的应用需求;二是通过增加填充数据来进一步提高密文的安全性。本次主要介绍分组对称算法中常用的PKCS7。

PKCS7是当下各大加密算法都遵循的填充算法,且 OpenSSL 加密算法默认填充算法就是 PKCS7。PKCS7Padding的填充方式为当数据长度不足数据块长度时,缺几位补几个几,eg.对于AES128算法其数据块为16Byte(数据长度需要为16Byte的倍数),如果数据为”00112233445566778899AA”一共11个Byte,缺了5位,采用PKCS7Padding方式填充之后的数据为“00112233445566778899AA0505050505”。

特别注意的一点是如果是数据刚好满足数据块长度也要在元数据后在按PKCS7规则填充一个数据块数据,这样做的目的是为了区分有效数据和补齐数据。仍以AES128为例:如果数据为”00112233445566778899AABBCCDDEEFF”一共16个符合数据块规则采用PKCS7Padding方式填充之后的数据为“00112233445566778899AABBCCDDEEFF10101010101010101010101010101010”。

PKCS7补齐代码如下:

void PKCS7_Padding(u8*InOutBuf,u32 *Inoutlen ,u8 Blocksize)  
{
	u8  paddata=0x00;
	u32  padoffset=0x00;
	u32 i;
	u32 lp;
	lp = *Inoutlen;
	paddata = Blocksize-(lp%Blocksize);
	padoffset =(lp/Blocksize)*Blocksize+(lp%Blocksize);  
	for(i=0 ;i<paddata;i++)
	InOutBuf[padoffset+i] = paddata;  
	*Inoutlen +=paddata ;
}
  • 作者:Zero_Era
  • 原文链接:https://blog.csdn.net/qq_33674331/article/details/118025541
    更新时间:2022-09-03 14:17:46