Android RSA加密模式和JAVA默认不一致
RSA加密直接使用服务端的代码发现无法服务端解密android的内容,查阅资料后发现最可能出现的问题
Java和Android端的RSA加密填充模式不同
默认设置下
java代码
1 | Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); |
anroid代码
1 | Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding"); |
如果android端和服务器的填充模式(通过Cipher设置)不同的话,是解密不了的
为了保持一致需要设置为一致
1 | //默认设置,会导致模式不一致 |
扩展:RSA的填充模式(Padding)
- RSA_PKCS1_PADDING 填充模式,最常用的模式(Java默认)
要求: 输入:必须 比 RSA 钥模长(modulus) 短至少11个字节, 也就是 RSA_size(rsa) – 11 如果输入的明文过长,必须切割,然后填充。
输出:和modulus一样长
根据这个要求,对于1024bit的密钥,block length = 1024/8 – 11 = 117 字节 - RSA_PKCS1_OAEP_PADDING
输入:RSA_size(rsa) – 41
输出:和modulus一样长 - RSA_NO_PADDING 不填充(android默认)
输入:可以和RSA钥模长一样长,如果输入的明文过长,必须切割, 然后填充
输出:和modulus一样长
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 个人学习经验分享!