PKCS#5填充模式
PKCS#5填充的定义
PKCS#5填充是PKCS#7填充的一个子集,在PKCS#7填充时BlockSize为8的时候,PKCS#5与PKCS#7填充是一样的,
在BlockSize不同时PKCS#5与PKCS#7填充是不同的,PKCS#5填充是将数据填充到8的倍数,填充后数据长度的计算公式是
定于元数据长度为x, 填充后的长度是 x + (8 - (x % 8)), 填充的数据是 8 - (x % 8)
填充数据样例
现在数据是1byte
数据数 0x41
填充前:0x41
填充后:0x410x070x070x070x070x070x070x07
现在数据是2byte
数据数 0x41
填充前:0x410x41
填充后:0x410x410x060x060x060x060x060x06
现在数据是2byte
数据数 0x41
填充前:0x410x41
填充后:0x410x410x060x060x060x060x060x06
现在数据是3byte
数据数 0x41
填充前:0x410x410x41
填充后:0x410x410x410x050x050x050x050x05
现在数据是4byte
数据数 0x41
填充前:0x410x410x410x41
填充后:0x410x410x410x410x040x040x040x04
现在数据是5byte
数据数 0x41
填充前:0x410x410x410x410x41
填充后:0x410x410x410x410x410x030x030x03
现在数据是6byte
数据数 0x41
填充前:0x410x410x410x410x410x41
填充后:0x410x410x410x410x410x410x020x02
现在数据是7byte
数据数 0x41
填充前:0x410x410x410x410x410x410x41
填充后:0x410x410x410x410x410x410x410x01
现在数据是8byte
数据数 0x41
填充前:0x410x410x410x410x410x410x410x41
填充后:0x410x410x410x410x410x410x410x410x080x080x080x080x080x080x080x08
填充算法java的实现
public byte[] pkcs5_padding(byte[] source) {
int sourceLength = source.length;
int paddingLength = sourceLength + (sourceLength - (sourceLength % 8));
byte[] paddingResult = new byte[paddingLength];
System.arrayCopy(source, 0, paddingResult, 0, sourceLength);
for (int i = sourceLength; i < paddingLength; i++) {
paddingResult[i] = (byte)(sourceLength - (sourceLength % 8);
}
return paddingResult;
}