【问题标题】:How to use certificates from a java PKCS#12 keystore for encrypting and decrypting files? [closed]如何使用来自 java PKCS#12 密钥库的证书来加密和解密文件? [关闭]
【发布时间】:2012-09-19 01:55:27
【问题描述】:

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

【问题讨论】:

  • PKCS#12 不是加密算法,所以你的问题没有意义。
  • 这个问题(及其答案)对我很有帮助。使用当前文本和主题行,应该重新打开它

标签: java cryptography pkcs#12


【解决方案1】:

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

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

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

【讨论】:

  • 我认为基于 PKCS#12 的密钥库使用包含数字的字符串作为别名,您不能只使用任何别名(您会将别名存储在 PKCS#12 密钥库中的什么位置?)。但我必须承认我不是 100% 确定这一点。
  • PKCS12 提供比 JKS 更强大的加密算法。切换到 PKCS12 可以提高密钥库的完整性和机密性。 openjdk.java.net/jeps/229
【解决方案2】:

This blog post should explain it to you perfectly.

对 PEM 文件使用 PKCS12 加密。

要使其运行,您首先需要 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

【讨论】:

  • 感谢您的即时回复。 “.pfx”和 PEM 文件是如何使用的?
  • @Sasha pfx 文件通常是包含加密私钥的文件,并且通常受密码保护,PEM 基本上是包含私钥的文件,如果您想稍后更新扩展名,这很有用点
  • @EugeneMayevski'EldoSCorp - 人们会感谢帮助/回答/引导他们朝着正确方向前进的人,而不是发现错误或纠正问题。希望你能把你的努力放在正确的地方给别人。谢谢。
  • @EugeneMayevski'EldoSCorp 如果它让你如此不爽,你为什么不重新编辑它?
  • ...或者你可以在提到的地方去掉“算法”这个词,现在问题很好。
猜你喜欢
  • 2012-06-06
  • 2014-03-21
  • 2011-04-06
  • 2018-11-24
  • 2019-05-25
  • 2011-05-02
  • 2021-09-22
  • 2013-01-02
  • 1970-01-01
相关资源
最近更新 更多