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