androidRSA加密,java解密出现错误或者乱码

后台是java,我是做android的,这是前提。

前两天遇到一个问题,项目要求一些敏感数据用公钥加密之后传过去,或者是后台传过来的数据用公钥解密。
然后就遇到问题了
首先是我解密出现乱码,而且乱码很奇葩,解析出来的密文后面是正确的,前面附加了一段乱码

然后后台解析我传过去的密文也出现了问题,直接解析错误。

网上找了很久没找到,问别人,有个哥们告诉我是编码的问题,就是他:上海-零度    qq群里叫这个,哈哈


================================================================================

好了,正式说原因和解决方法



java和android默认的加密方式不一样,如下:

private static String RSA_ANDROID = "RSA/ECB/PKCS1Padding";
private static String RSA_JAVA = "RSA/None/PKCS1Padding";

只要在解密后台数据的时候,用android默认的,在加密数据的时候,用java默认的就可以了
容我举个栗子:
/**
	 * 用公钥加密 
* 这个是加密之后用来传给后台的 * * @param data * 需加密数据的byte数据 * @param pubKey * 公钥 * @return 加密后的byte型数据 */ public static byte[] encryptData(byte[] data, PublicKey publicKey) { try { Cipher cipher = Cipher.getInstance(RSA_JAVA); // 编码前设定编码方式及密钥 cipher.init(Cipher.ENCRYPT_MODE, publicKey); // 传入编码数据并返回编码结果 return cipher.doFinal(data); } catch (Exception e) { e.printStackTrace(); return null; } }
==============================================
/***
	 * 用公钥解密
	 * 这个是接收到后台传过来的密文,解密用的
	 * @param encryptedData
	 * @param publicKey
	 * @return
	 */
	public static byte[] decryptData(byte[] encryptedData, PublicKey publicKey) {
		try {
			Cipher cipher = Cipher.getInstance(RSA_ANDROID);
			cipher.init(Cipher.DECRYPT_MODE, publicKey);
			return cipher.doFinal(encryptedData);
		} catch (Exception e) {
			return null;
		}
	}



ok,希望有帮到你


最后,我的名字叫雷锋~

你可能感兴趣的:(Android)