昨天有人問我加密字符串長度超過117位就會崩潰,該怎么搞,說實話我當時都懵逼了。
- 這篇博文有比較好的解釋@Defonds。
生成密文的長度和明文長度無關,但明文長度不能超過密鑰長度
不管明文長度是多少,RSA 生成的密文長度總是固定的。但是明文長度不能超過密鑰長度。比如 Java 默認的 RSA 加密實現不允許明文長度超過密鑰長度減去 11(單位是字節,也就是 byte)。也就是說,如果我們定義的密鑰(我們可以通過 java.security.KeyPairGenerator.initialize(int keysize) 來定義密鑰長度)長度為 1024(單位是位,也就是 bit),生成的密鑰長度就是 1024位 / 8位/字節 = 128字節,那么我們需要加密的明文長度不能超過 128字節 -11 字節 = 117字節。也就是說,我們最大能將 117 字節長度的明文進行加密,否則會出問題(拋諸如 javax.crypto.IllegalBlockSizeException: Data must not be longer than 53 bytes 的異常)。
同樣的道理iOS加密也會有這個問題。
一個比較好的解決辦法就是將明文分段加密
--------------------->這是Demo鏈接<---------------------