1

我是 Java 中 RSA 算法和密码学的新手。我有一个由第 3 方组织提供的.cer格式格式的客户证书。现在我需要使用密码密钥证书的公共部分加密我的密码,使用 RSA 算法和 PKCS #1.5 填充 - 所以不是 OAEP - 在 Java 中。

您能否检查以下是否执行上述操作?

Security.addProvider(neworg.bouncycastle.jce.provider.BouncyCastleProvider());
byte[] input = "Abc123".getBytes();
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
FileInputStream fin = new FileInputStream(new File("/test.cer"));
CertificateFactory f = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate)f.generateCertificate(fin);
PublicKey pk = certificate.getPublicKey();
cipher.init(Cipher.ENCRYPT_MODE, pk, new SecureRandom());
byte[] cipherText = cipher.doFinal(input);
4

1 回答 1

2

是的,您提供的代码看起来不错。

请注意,如果您用它替换"RSA/None/PKCS1Padding",则"RSA/ECB/PKCS1Padding"可以改用默认的 Sun 提供程序。


请务必注意,您的代码会生成“普通”签名;它不包括您的数据或证书。通常,最好创建一个CMS 签名数据结构,例如,它可以包括您用于创建签名的“叶”证书。

CMS 是一种所谓的加密容器格式,它可以保存数据、签名和签名算法、证书、签名者等附加信息等结构。

于 2014-03-21T23:40:59.207 回答