RSA加解密

前言

RSA是一种非对称加解密算法,非对称意思是加密秘钥和解密秘钥是两个;

秘钥分为公钥和私钥,我们可以通过私钥推导出公钥,但是不能用公钥推导出私钥,所以公钥是能被公开的秘钥,而私钥是不能被公开的秘钥;

秘钥至少为500位以上,一般推荐使用1024bit,个别机构使用的2048bit(比如CA-美国化学文摘)

目前为止512bit和768bit的rsa秘钥分别在1999年和2009年12月12日被破解,所以至少要使用1024bit

RSA是一种可以对数据和数字签名进行加密的算法,但是因为秘钥太长,所以通常数据使用对称加密,而秘钥使用RSA加密

在java中如何使用

在java中使用RSA算法加解密,可以参考Ico项目中的代码,位于ico.ico.security包下,下面记录几个碰到的问题

私钥加密公钥解密出现神秘字符

在本地测试中,我们自己加密并解密,是正常的,但是服务器加密,客户端解密,解密出来的明文,起始位置会出现很多的神秘字符

解决方案可以参考项目中的Util代码,着重查看Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);

出现神秘代码是由于之前这里传入的字符为RSA,使用RSA/ECB/PKCS1Padding算法就不会出现这个问题

但是要注意的是秘钥的算法,也就是KeyFactory kf = KeyFactory.getInstance(ENCRYPT_ALGORITHM);这里使用的依旧是RSA

私钥不能用于加密|公钥不能用于解密

通常这些错误下面第一行可以看到底层使用的算法提供商,我这里是com.ibm.crypto.provider,这说明使用了ibm的算法提供商,我们需要替换算法提供商
参考项目代码,在加密解密前替换提供商

//替换提供商,部分环境使用ibm的算法提供商,可能会不支持私钥加密
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);

再次运行,就正常了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值