<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 關(guān)于SM4填充算法PKCS5和PKCS7講解

關(guān)于SM4填充算法PKCS5和PKCS7講解

發(fā)布人:電子禪石 時(shí)間:2024-10-14 來(lái)源:工程師 發(fā)布文章

前言:

  今天剛好在系統上增加SM4算法的支持,SM4算法的實(shí)現網(wǎng)上你可以搜到很多版本,

但是如果你要運用到實(shí)際中時(shí),你一定要了解SM4算法填充規則。


正文:

  首先,SM4接口大多是以最小單位16Byte進(jìn)行加解密。

因此SM4的密文長(cháng)度通常是16Byte的倍數。當你待加密數據小于16Byte時(shí),

你便需要使用填充算法。


PKCS7填充算法規則:


 PKCS7填充單位為16Byte,對于不滿(mǎn)16Byte的數據,以【16-數據長(cháng)度】字符進(jìn)行填充。

其實(shí)現算法如下:

int PKCS7(unsigned char *pucData, unsigned long ulDataLen, unsigned char pucPaddingData[16])
{
	unsigned char pucPadding = 0;
	
	if(ulDataLen > 16)
	{
		return -1;
	}
	pucPadding = 16 - ulDataLen;
	
	memcpy(pucPaddingData, pucData, ulDataLen);
	memset(pucPaddingData + ulDataLen, pucPadding, 16 - ulDataLen);
	return 0;
}

PKCS5填充算法規則:

 PKCS5屬于PKCS7填充單位為8Byte,對于不滿(mǎn)8Byte的數據,以【8-數據長(cháng)度】字符進(jìn)行填充。其實(shí)現算法如下:

int PKCS5(unsigned char *pucData, unsigned long ulDataLen, unsigned char pucPaddingData[8])
{
	unsigned char pucPadding = 0;
	
	if(ulDataLen > 8)
	{
		return -1;
	}
	pucPadding = 8 - ulDataLen;
	
	memcpy(pucPaddingData, pucData, ulDataLen);
	memset(pucPaddingData + ulDataLen, pucPadding, 8 - ulDataLen);
	return 0;
}

 

注意事項:

1、如果你使用的是SM4算法,你直接使用PKCS7填充即可,之前我遇到過(guò)JAVA的API里寫(xiě)著(zhù)使用PKCS5,但實(shí)際輸出結果為PKCS7。


2、如果你使用了填充算法加密數據,如果是PKCS7算法,則待加密數據為16倍數時(shí),待加密數據尾部需要補16位0x10。


3、如果你使用了填充算法加密數據,如果是PKCS5算法,則待加密數據為8倍數時(shí),待加密數據尾部需要補8位0x8。


4、同理解密時(shí),如果確定加密時(shí)使用了填充算法,對于解密后的數據,需要將填充數據剔除。

————————————————


                        

                     

原文鏈接:https://blog.csdn.net/wjb123sw99/article/details/105015933


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: sm4

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>