2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > java android rsa加密解密_Android RSA数据加密与Java服务端RSA私钥解密出错问题

java android rsa加密解密_Android RSA数据加密与Java服务端RSA私钥解密出错问题

时间:2022-10-20 12:19:54

相关推荐

java android rsa加密解密_Android RSA数据加密与Java服务端RSA私钥解密出错问题

1. 出错描述:服务RSA解密抛出javax.crypto.BadPaddingException: Decryption error

2.出错原因:Android系统使用的虚拟机(dalvik)跟SUN标准JDK是有所区别的,其中他们默认的RSA实现就不同。即Android端用Cipher.getInstance("RSA")方法进行加密时,使用的provider是Bouncycastle Security provider,Bouncycastle Security provider默认实现的是“RSA/None/NoPadding”算法,而服务器(PC)端用Cipher.getInstance("RSA")进行解密时,使用的是Sun的security provider,实现的是“RSA/None/PKCS1Padding”算法,所以,解密时会失败。

3. 解决方法:Android端的加密算法如下

/**

* 公钥加密

* @param data 待加密数据

* @param key 密钥

* @return byte[] 加密数据

* */

public static byte[] encryptByPublicKey(byte[] data,String key) throws Exception{

//解密密钥

byte[] keyBytes = decryptBASE64(key);

//实例化密钥工厂

KeyFactory keyFactory=KeyFactory.getInstance(KEY_ALGORITHM);

//初始化公钥

//密钥材料转换

X509EncodedKeySpec x509KeySpec=new X509EncodedKeySpec(keyBytes);

//产生公钥

PublicKey pubKey=keyFactory.generatePublic(x509KeySpec);

//数据加密

Cipher cipher=Cipher.getInstance("RSA/None/PKCS1Padding");//Android端使用

cipher.init(Cipher.ENCRYPT_MODE, pubKey);

return cipher.doFinal(data);

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。