【发布时间】:2020-02-03 00:43:31
【问题描述】:
我只是在试验下面的代码,但我不明白为什么代码会这样:
public class Test
{
public static void main(String args[]) throws Exception
{
CertificateFactory certificateFactory1 = CertificateFactory.getInstance("X.509");
X509Certificate certificate1 = (X509Certificate)certificateFactory1.generateCertificate(Test.class.getResourceAsStream("pub.cer"); //Loading ssl certificate
PublicKey pk1 = certificate1.getPublicKey();
Cipher cipher1 = Cipher.getInstance("RSA/ECB/NOPADDING");
cipher1.init(Cipher.ENCRYPT_MODE, pk1);
bytes[] encrypted = cipher1.doFinal("dummy".getBytes("UTF-8");
CertificateFactory certificateFactory2 = CertificateFactory.getInstance("X.509");
X509Certificate certificate2 = (X509Certificate)certificateFactory2.generateCertificate(Test.class.getResourceAsStream("pub.cer"); //Loading ssl certificate
PublicKey pk2 = certificate2.getPublicKey();
Cipher cipher2 = Cipher.getInstance("RSA/ECB/NOPADDING");
cipher2.init(Cipher.DECRYPT_MODE, pk2);
bytes[] decrypted = cipher2.doFinal(encrypted);
}
}
为什么在byte[] 解密时我得到doFinal 的输出?我正在使用 jdk1.8.0_192。
因为我使用公钥进行解密,并且在非对称公钥加密中,我们可以使用公钥加密并使用私钥解密。
有人可以解释一下并希望有文档支持吗?
【问题讨论】:
-
您的示例甚至无法编译。请不要输入代码,而是复制粘贴。
-
无法重现,每次都出现异常。请尝试生成MCVE,否则我怀疑我们能否为您提供帮助。
-
您可以使用自签名证书进行测试
-
我确实使用自签名证书对其进行了测试。再次,请生成一个 MCVE。
-
你能分享一下结果吗?你又得到运行时异常了吗?我只是在执行上面的代码并在 byte[] 中解密输出
标签: java encryption cryptography rsa public-key-encryption