// 导包
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");
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。