10

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

4

2 回答 2

23

正如提到 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.

要解密,只需使用不同的模式初始化密码,并且取决于加密算法,密钥。对称算法的密钥相同,非对称算法加密使用公钥,解密使用私钥。

本文中,您可以了解有关密码学的更多信息。

于 2012-09-27T12:13:39.167 回答
7

这篇博文应该完美地向您解释

对 PEM 文件使用 PKCS12 加密。

要使其运行,您首先需要一个 PFX(个人文件交换)格式的 Java 密钥库。

密钥工具命令:

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

这将生成 mykeystore.pfx 文件。该文件可以在 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

于 2012-09-27T09:57:31.873 回答