RSA加解密中必須考慮到的密鑰長(cháng)度、明文長(cháng)度和密文長(cháng)度問(wèn)題。明文長(cháng)度需要小于密鑰長(cháng)度,而密文長(cháng)度則等于密鑰長(cháng)度。因此當加密內容長(cháng)度大于密鑰長(cháng)度時(shí),有效的RSA加解密就需要對內容進(jìn)行分段。
這是因為,RSA算法本身要求加密內容也就是明文長(cháng)度m必須0<m<密鑰長(cháng)度n。如果小于這個(gè)長(cháng)度就需要進(jìn)行padding,因為如果沒(méi)有padding,就無(wú)法確定解密后內容的真實(shí)長(cháng)度,字符串之類(lèi)的內容問(wèn)題還不大,以0作為結束符,但對二進(jìn)制數據就很難,因為不確定后面的0是內容還是內容結束符。而只要用到padding,那么就要占用實(shí)際的明文長(cháng)度,于是實(shí)際明文長(cháng)度需要減去padding字節長(cháng)度。我們一般使用的padding標準有NoPPadding、OAEPPadding、PKCS1Padding等,其中PKCS#1建議的padding就占用了11個(gè)字節。
這樣,對于1024長(cháng)度的密鑰。128字節(1024bits)-減去11字節正好是117字節,但對于RSA加密來(lái)講,padding也是參與加密的,所以,依然按照1024bits去理解,但實(shí)際的明文只有117字節了。
所以如果要對任意長(cháng)度的數據進(jìn)行加密,就需要將數據分段后進(jìn)行逐一加密,并將結果進(jìn)行拼接。同樣,解碼也需要分段解碼,并將結果進(jìn)行拼接。