android RSA 使用公钥加密里的坑

RAS算法使用公钥加密代码:

/**
 * 公钥加密
 */
public static String encryptByPublicKey(String data, String key)
        throws GeneralSecurityException
{
    byte[] keyBytes = Base64.decode(key, NO_WRAP);
    X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");

    PublicKey pubKey = keyFactory.generatePublic(keySpec);

    Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
    cipher.init(Cipher.ENCRYPT_MODE, pubKey);
    byte[] mi = cipher.doFinal(data.getBytes());

    return Base64.encodeToString(mi, Base64.DEFAULT);
}


    和后台调试了大半天总是鉴权失败,查找很多资料,甚至和后台java代码对比,也发现不了到底有什么不一样。

问题的根因在于android底层还是和原生的java有很多的区别。根因就在于这句代码:

Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());

在获取Cipher的实例时,参数改成RSA/ECB/PKCS1Padding即可。原因就是此处如果写成"RSA"加密出来的信息JAVA服务器无法解析 且每次加密出来的密文都是

一样的(RSA算法加密出来的算法应该是每次都不一样)

根本原因还没来得及去研究.有兴趣的同学可以去研究下



---------- 神坑。。。


你可能感兴趣的:(笔记)