凌科芯安加密芯片吧 关注:18贴子:35
  • 0回复贴,共1

数据填充之PKCS7填充

只看楼主收藏回复

在数据加解密应用中,数据填充是其中重要的组成部分。数据填充通常有两个作用一是按要求将数据补足到分组块长度来满足加密算法的应用需求;二是通过增加填充数据来进一步提高密文的安全性。本次主要介绍分组对称算法中常用的PKCS7。
PKCS7是对称安全算法常用的数据填充规则。PKCS7 Padding的填充方式为当数据长度不足数据块长度时,缺几位补几个,eg.对于AES128算法其数据块为16Byte(数据长度需要为16Byte的倍数),如果数据为”00112233445566778899AA”一共11个Byte,缺了5位,采用PKCS7 Padding方式填充之后的数据为“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 ;
}


IP属地:北京1楼2024-10-17 15:23回复