// 导包
import android.util.Base64
/**
* @params str 要加密的字符串
*/
public static String rsaEncode(String str) {
String publicKey = "后台给的公钥";
String outStr = "";
try {
// base64编码的公钥
byte[] decoded = Base64.decode(publicKey, Base64.DEFAULT);
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
// RSA加密
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
outStr = Base64.encodeToString(cipher.doFinal(str.getBytes("UTF-8")), Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
}
return outStr;
}
加密过程中遇到一个问题:本以为给Java端要加密代码直接使用就可以,但使用之后在Java端是无法解密的。
原因:加密标准不同,"RSA/ECB/PKCS1Padding" 与 "RSA"
解决:
// 在android中应该使用这个标准
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
// 在服务端使用这个标准
Cipher cipher = Cipher.getInstance("RSA");