繁体   English   中英

使用公钥进行Java RSA加密

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM