RSA算法明文長(cháng)度介紹
RSA算法一次能加密的名文長(cháng)度與密鑰長(cháng)度成正比,如RSA 1024實(shí)際可加密的明文長(cháng)度最大是1024bits。如果小于這個(gè)長(cháng)度怎么辦?就需要進(jìn)行數據補齊(padding),因為如果沒(méi)有padding,用戶(hù)則無(wú)法確分解密后內容的真實(shí)長(cháng)度。字符串之類(lèi)的內容問(wèn)題還不大,以0作為結束符,但對二進(jìn)制數據就很難理解,因為不確定后面的0是內容還是內容結束符。
只要用到padding,那么就要占用實(shí)際的明文長(cháng)度。于是才有117字節的說(shuō)法,即下面這種常見(jiàn)的說(shuō)法:len_in_byte(raw_data) = len_in_bit(key)/8 -11,如1024bit的密鑰,一次能加密的內容長(cháng)度為 1024/8 -11 = 117 byte。
我們一般使用的padding標準有NoPPadding、OAEPPadding、PKCS1Padding等,其中PKCS#1建議的padding就占用了11個(gè)字節。對于RSA加密來(lái)講,padding也是參與加密的,所以實(shí)際的明文只有117字節了。
關(guān)于PKCS#1 padding規范可參考:RFC2313 chapter 8.1,我們在把明文送給RSA加密器前,要確認這個(gè)值是不是大于位長(cháng),也就是如果接近位長(cháng),那么需要先padding再分段加密。除非我們是“定長(cháng)定量自己可控可理解”的加密不需要padding。
各種 padding 對輸入數據長(cháng)度的要求:
私鑰加密:
RSA_PKCS1_PADDING RSA_size-11
RSA_NO_PADDING RSA_size-0
RSA_X931_PADDING RSA_size-2
公鑰加密
RSA_PKCS1_PADDING RSA_size-11
RSA_SSLV23_PADDING RSA_size-11
RSA_X931_PADDING RSA_size-2
RSA_NO_PADDING RSA_size-0
RSA_PKCS1_OAEP_PADDING RSA_size-2 * SHA_DIGEST_LENGTH-2
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。