昨天有人问我加密字符串长度超过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链接<---------------------
网友评论
2016-05-01 15:33:50.919 Rsa加密[8803:406347] 加密前:这是一段将要使用'.der'文件加密的字符串!
2016-05-01 15:33:50.919 Rsa加密[8803:406347] 加密后:(null)
2016-05-01 15:33:50.919 Rsa加密[8803:406347] 解密后:(null)
为什么是空的,按照你的方法一步一步来的,你知道为什么吗?