如何使用java PKCS#12密钥库中的证书来加密和解密文件?

时间:2012-09-27 09:55:05

标签: java cryptography pkcs#12

有人能解释如何使用存储在java'PKCS#12`密钥库中的证书加密和解密文件吗?

2 个答案:

答案 0 :(得分:19)

正如Eugene Mayevski所说,你的问题是错误的,无法以原始形式回答。但我会试着为你澄清一下。 PKCS#12 - 加密格式用于存储证书和私钥。加密或解密数据时,可以使用PKCS#12容器的密码实现和内容

Java内置了对PKCS#12密钥库的支持,使用这个容器与标准的JKS密钥库没什么区别。

例如,加载JKS密钥库的代码

KeyStore store = KeyStore.getInstance(KeyStore.getDefaultType());
store.load(is, password.toCharArray());

和加载PKCS#12密钥库的代码

KeyStore store = KeyStore.getInstance("PKCS12");
store.load(is, password.toCharArray());

之后,您可以无限制地使用密钥库内容。您可以获取存储在密钥库中的证书和密钥,而无需在Firefox中使用导入/导出进行奇怪的操作。

Key key = store.getKey("alias_for_key", password.toCharArray());

接下来,当你有密钥和证书时,就是加密。用于加密。你需要Cipher类的实例。

Cipher c = Cipher.getInstance(key.getAlgorithm());
c.init(Cipher.ENCRYPT_MODE, key); 

密码准备好加密。如果加密数据相对较小,则可以使用update()方法,其他方法是创建CipherOutputStream

要解密,只需使用不同模式的init cipher,并依赖于加密算法密钥。对于对称算法,密钥将相同,对于非对称算法,加密使用公钥,并用于解密私钥。

在此article中,您可以了解有关加密的更多信息。

答案 1 :(得分:6)

This blog post should explain it to you perfectly

  

将PKCS12加密与PEM文件一起使用。

     

要实现此功能,首先需要PFX中的Java密钥库(个人版)   文件交换)格式。

Keytool命令:

 keytool -genkeypair -alias mykeystore -keypass lala -keystore
 mykeystore.pfx -storepass lala -validity 10000 -keyalg RSA -keysize
 2048 -storetype pkcs12

这将生成mykeystore.pfx文件。可以导入此文件 作为Firefox的证书。

导入 - 打开Firefox - 工具 - 选项 - 高级 - 查看证书 - 您的证书 - 导入 - 选择PFX文件 - 导入它。

导出 - 选择证书 - 查看 - 详细信息 - 将其导出到X.509 PEM)。 (您也可以导出到DER)

<强> 1。私钥

首先,我们需要从PFX文件中提取私钥。

<强> 2。公钥

其次,您需要使用公钥加密文件。但首先你需要公钥。

第3。使用公钥加密

现在您有了可以加密文件的公钥。

<强> 4。使用私钥解密

所以现在文件已加密,可以为接收方发送/存储......好吧......接收并解密它。要解密它,我们需要私钥,幸运的是保存/存储在private.pem文件中

<强> 5。使用AES密钥加密/解密

加密/解密内容的另一种方法是通过AES 256位密钥。密钥将按文件随机生成并写入文件系统。然后,可以使用上述RSA机制对该AES密钥进行加密。这将提高大型文件的加密性能。

来源 - http://coenos.com/blog/?p=257