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算法加密出来的算法应该是每次都不一样)

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



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


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值