[英]Java RSA encryption with public key
我正在尝试使用从证书中获取的公钥来加密文件。
PublicKey publicKey = cert.getPublicKey();
cipher = Cipher.getInstance("RSA", "BC");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
抛出异常:java.lang.IllegalArgumentException:不是RSA密钥!
我试过了 :
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec spec = new X509EncodedKeySpec(publicKey.getEncoded());
PublicKey rsaPublicKey = KeyFactory.getInstance("RSA").generatePublic(spec);
但是抛出了java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException
:无效的RSA公钥
org.bouncycastle.asn1.pkcs.RSAPublicKey
需要2个BigInteger
(可能是模数和公共指数 )。
查看cert.getPublicKey()
显示它的DSAPublicKeyImpl
。
我怎样才能把它转换成一个RSAPublicKey
(或任何其他)使用由Cipher.getInstance("RSA", "BC")
DSA密钥不能用于RSA加密。 DSA仅用于签名,它使用不同的数学,需要不同的密钥信息。
相反,生成RSA密钥,并将其与实现CMS或PGP等标准的库一起使用(BouncyCastle支持两者)。 它们使用随机密钥进行对称密码加密文件,然后使用每个收件人的公钥加密该密钥。 这是一个更好的方法有很多原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.