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