Android RSA加密(Java后台给出公钥)

// 导包
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");

你可能感兴趣的:(Android RSA加密(Java后台给出公钥))