公钥加密,私钥解密⽰例程序(JAVA)
最近再研究安全⽅⾯的东西,总结⼀下,⼤家有⽤到的可以参考下。
1.证书⽣成
前提:JDK已安装且正确配置环境变量
⾸先在C盘建⽴⽬录 MyKeyStore,⽤来存放证书库以及导出的证书⽂件,然后在命令⾏执⾏下列2句
下句含义:在当前⽬录创建 TestStore 密钥库,库密码 000000 ,创建证书 TestKey2 :⾮对称密钥,RSA ,key密码为 000000 ,存于TestStore
C:/MyKeyStore > keytool -genkey -alias TestKey2 -dname "CN=test222" -keyalg RSA -keystore TestStore -storepass 000000 -keypass 000000
下句含义:将 TestStore 库中的 TestKey2 导出为证书⽂件 ,这⾥可能需要将 export 修改为 exportcert
C:/MyKeyStore > keytool -export -alias TestKey2 - -keystore TestStore -storepass 000000
证书库证书保存证书的公私钥,导出的证书⽂件只携带公钥
2.代码实例
[java]
01. public static void main(String[] args) throws Exception {
02.
03. byte[] msg = "test!中⽂".getBytes("UTF8"); // 待加解密的消息
04.
05. // ⽤证书的公钥加密
06. CertificateFactory cff = Instance("X.509");
07. FileInputStream fis1 = new FileInputStream("C://MyKeyStore//"); // 证书⽂
件
08. Certificate cf = ateCertificate(fis1);
09. PublicKey pk1 = cf.getPublicKey(); // 得到证书⽂件携带的公钥
10. Cipher c1 = Instance("RSA/ECB/PKCS1Padding"); // 定义算法:RSA
11. c1.init(Cipher.ENCRYPT_MODE, pk1);
12. byte[] msg1 = c1.doFinal(msg); // 加密后的数据
13.
14. // ⽤证书的私钥解密 - 该私钥存在⽣成该证书的密钥库中
15. FileInputStream fis2 = new FileInputStream("C://MyKeyStore//TestStore");
16. KeyStore ks = Instance("JKS"); // 加载证书库
17. char[] kspwd = "000000".toCharArray(); // 证书库密码
18. char[] keypwd = "000000".toCharArray(); // 证书密码
19. ks.load(fis2, kspwd); // 加载证书
20. PrivateKey pk2 = (PrivateKey) ks.getKey("TestKey2", keypwd); // 获取证书私钥
21. fis2.close();
22. Cipher c2 = Instance("RSA/ECB/PKCS1Padding");
cipher命令23. c2.init(Cipher.DECRYPT_MODE, pk2);
24. byte[] msg2 = c2.doFinal(msg1); // 解密后的数据
25.
26. System.out.println(new String(msg2, "UTF8")); // 将解密数据转为字符串
27. }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论