去哪里學(xué)習(xí)做網(wǎng)站關(guān)鍵詞查詢網(wǎng)址
PKCS#5填充是PKCS#7填充的一個子集,在PKCS#7填充時BlockSize為8的時候,PKCS#5與PKCS#7填充是一樣的,在BlockSize不同時PKCS#5與PKCS#7填充是不同的。
PKCS#5填充是將數(shù)據(jù)填充到8的倍數(shù),
填充后數(shù)據(jù)長度的計算公式:
定于元數(shù)據(jù)長度為x,
填充后的長度是 x + (8 - (x % 8)),
填充的數(shù)據(jù)是 8 - (x % 8)
示例:
1byte
? 數(shù)據(jù)數(shù) 0x41
? ? 填充前:0x41
? ? 填充后:0x410x070x070x070x070x070x070x07
2byte
??數(shù)據(jù)數(shù) 0x41
? ? 填充前:0x410x41
? ? 填充后:0x410x410x060x060x060x060x060x06
3byte
??數(shù)據(jù)數(shù) 0x41
??填充前:0x410x410x41
??填充后:0x410x410x410x050x050x050x050x05
4byte
??數(shù)據(jù)數(shù) 0x41
? 填充前:0x410x410x410x41
? ?填充后:0x410x410x410x410x040x040x040x04
5byte
??數(shù)據(jù)數(shù) 0x41
??填充前:0x410x410x410x410x41
? ?填充后:0x410x410x410x410x410x030x030x03
6byte
? ?數(shù)據(jù)數(shù) 0x41
? ?填充前:0x410x410x410x410x410x41
? ?填充后:0x410x410x410x410x410x410x020x02
7byte
? ?數(shù)據(jù)數(shù) 0x41
? ?填充前:0x410x410x410x410x410x410x41
? ?填充后:0x410x410x410x410x410x410x410x01
8byte
?數(shù)據(jù)數(shù) 0x41
?填充前:0x410x410x410x410x410x410x410x41
??填充后:0x410x410x410x410x410x410x410x410x080x080x080x080x080x080x080x08
以下是c++代碼
unsigned char* test_pkcs5padding(unsigned char* in, int m_BlockSize)
{int inlen = strlen((char*)in); //1.獲取輸入長度int outlen = inlen + (8 - (inlen % 8)); //2.計算輸出長度unsigned char* out = new unsigned char[outlen]; //3.創(chuàng)建輸出bufmemcpy(out, in, inlen); //4.out for (int i = inlen; i < outlen; i++) //5.填充out 中剩余的位數(shù){int paddingval = (outlen - (inlen % 8));out[i] = paddingval;}return out;
}
test_main()
{int m_BlockSize = 8;unsigned char in[]="A";unsigned char *out=NULL;out=test_pkcs5padding(in, 8);unsigned char in2[] ="AA";out=test_pkcs5padding(in2,8);unsigned char in3[] = "AAA";out = test_pkcs5padding(in3,8);unsigned char in8[] = "AAAAAAAA";out = test_pkcs5padding(in8, 8);}
?
public byte[] pkcs5_padding(byte[] source) {int sourceLength = source.length;int paddingLength = sourceLength ?+ (8- (sourceLength % 8));byte[] paddingResult = new byte[paddingLength];System.arrayCopy(source, 0, paddingResult, 0, sourceLength);for (int i = sourceLength; i < paddingLength; i++) {paddingResult[i] = (byte)(paddingLength - (sourceLength % 8);}return paddingResult;}