說明
- 對(duì)稱加解密算法是分組運(yùn)算,運(yùn)算時(shí)需要將數(shù)據(jù)按固定長(zhǎng)度分組,由于明文不一定是指定大小的整數(shù)倍,因此需要將明文的最后一個(gè)分組填充至加密算法所要求的分組大小后進(jìn)行運(yùn)算。
- 隨著加解密算法的發(fā)展,出現(xiàn)了多種填充規(guī)則。
- 填充規(guī)則是對(duì)稱加密分組加密算法的通用機(jī)制,一種算法可能支持多種填充規(guī)則,例如:AES算法。
填充規(guī)則
PKCS5/PKCS5Padding
- 將原始數(shù)據(jù)長(zhǎng)度(字節(jié)數(shù))填充到8的倍數(shù),填充字節(jié)數(shù)據(jù)是 8 - (x % 8),x是原始數(shù)據(jù)長(zhǎng)度。
原始數(shù)據(jù):FF FF FF FF
填充后數(shù)據(jù):FF FF FF FF 04 04 04 04
PKCS7/PKCS7Padding
- 假設(shè)數(shù)據(jù)長(zhǎng)度需要填充n(n>0)個(gè)字節(jié)才對(duì)齊,那么填充n個(gè)字節(jié),每個(gè)字節(jié)都是n;如果數(shù)據(jù)本身就已經(jīng)對(duì)齊了,則填充一塊長(zhǎng)度為塊大小的數(shù)據(jù),每個(gè)字節(jié)都是塊大小。
- PKCS5以8字節(jié)為單元,而PKCS7支持1-255之間任意字節(jié)長(zhǎng)度為單元,PKCS7是兼容PKCS5的,PKCS5是PKCS7的一個(gè)子集。
- SM4,AES等大部分算法 分組長(zhǎng)度固定為128 Bits,因此采用的是該填充規(guī)則。
block size為16字節(jié)時(shí):
原始數(shù)據(jù): FF FF FF FF FF FF FF FF FF FF
填充后數(shù)據(jù): FF FF FF FF FF FF FF FF FF FF 06 06 06 06 06 06
ZeroBytePadding/ZeroPadding
- 使用數(shù)據(jù)0進(jìn)行填充,填充至符合塊大小的整數(shù)倍。
原始數(shù)據(jù):FF FF FF FF FF FF FF FF FF
填充后數(shù)據(jù):FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00
ISO10126PADDING
- 填充至符合塊大小的整數(shù)倍,填充的最后一個(gè)字節(jié)為填充的數(shù)量數(shù),其他字節(jié)隨機(jī)處理。
原始數(shù)據(jù):FF FF FF FF FF FF FF FF FF
填充后數(shù)據(jù):FF FF FF FF FF FF FF FF FF xx xx xx xx xx xx 07
xx 表示任意數(shù)據(jù)
ISO7816-4PADDING
- 填充至符合塊大小的整數(shù)倍,填充的第一個(gè)字節(jié)為 0x80,其他字節(jié)填 0。
原始數(shù)據(jù):FF FF FF FF FF FF FF FF FF
填充后數(shù)據(jù):FF FF FF FF FF FF FF FF FF 80 00 00 00 00 00 00
X923PADDING
- 填充至符合塊大小的整數(shù)倍,填充值最后一個(gè)字節(jié)為填充的數(shù)量數(shù),其他字節(jié)填 0。
原始數(shù)據(jù):FF FF FF FF FF FF FF FF FF
填充后數(shù)據(jù):FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07
注意
- 明文size是單組size的倍數(shù)的情況,也需要對(duì)明文進(jìn)行填充。
- 目的是方便統(tǒng)一處理,算法處理的數(shù)據(jù)一定是填充后的。
- 避免一些特殊情況,例如明文恰好是:FF FF FF FF FF FF FF FF FF FF 06 06 06 06 06 06,
加密算法無法區(qū)分后面的6個(gè)06是明文,還是填充的數(shù)據(jù)。
- 解密時(shí),需要根據(jù)加密時(shí)使用的填充規(guī)則,將填充數(shù)據(jù)剔除。
文章來源地址http://www.zghlxwxcb.cn/news/detail-490896.html
文章來源:http://www.zghlxwxcb.cn/news/detail-490896.html
到了這里,關(guān)于密碼學(xué) - 加解密算法 - 填充規(guī)則的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!