您的位置:首页 > 移动开发 > Android开发

Android客户端与服务器端RSA加密通讯加密字符不一致相关问题

2014-12-10 16:42 831 查看
RSA非对称加密算法 ,适用于数据量较小的情况,比如一般的用法:

1、生成RSA密钥对,公钥发给客户端使用,私钥由服务器使用;

2、客户端用公钥加密所有发出的数据,也用公钥解密所有收到的数据;

3、服务器用私钥加密所有发出的数据,也用私钥解密所有收到的数据;

但Android 客户端 在与 服务器端 通讯时 会遇到这样的问题:服务器无法解密客户端发送的加密数据,客户端可以解密服务器发送的加密数据,但被填充过(解密出来的明文比原始明文长一截)。

原因是 服务器端的 jdk 和 android上的 jdk 对 RSA的缺省算法实现不同。可以有的解决方案 :

一 , 客户端 指定RSA的缺省算法

pher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

部分不做修改

二,服务器端修改 添加 org.bouncycastle.jce.provider.BouncyCastleProvider

1、下一个jar包。http://www.bouncycastle.org/download/bcprov-jdk15on-148.jar

2、修改jre下lib/security目录下的java.security文件,加入下面一行

security.provider.3=org.bouncycastle.jce.provider.BouncyCastleProvider;

原有的顺序 顺序增加

3、将jar包添加到 jre下lib\ext中 

4、代码部分不做修改

 

android端 还可能遇到 Base64 的问题 比如说 android自带的 Base64无法encodeBase64String 出 服务器端的 decodeBase64的数据,需要Base64 jar 两边统一,但android导入的jar是是不起作用的,android的 sdk中 已存在 一样包名路径的 org.apache.commons.codec.binary.Base64 但未实现,一旦运行就会报错,所以只能下载base64源码 修改路径名 重新打包使用(codec.jar 已经上传到我资源下载)

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android RSA Base64