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

Sas*_*sha 9 java cryptography pkcs#12

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

use*_*873 19

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

Java具有与PKCS#12密钥库一起使用的内置支持,使用此容器与standart JKS密钥库没有太大区别.

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

KeyStore store = KeyStore.getInstance(KeyStore.getDefaultType());
store.load(is, password.toCharArray());
Run Code Online (Sandbox Code Playgroud)

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

KeyStore store = KeyStore.getInstance("PKCS12");
store.load(is, password.toCharArray());
Run Code Online (Sandbox Code Playgroud)

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

Key key = store.getKey("alias_for_key", password.toCharArray());
Run Code Online (Sandbox Code Playgroud)

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

Cipher c = Cipher.getInstance(key.getAlgorithm());
c.init(Cipher.ENCRYPT_MODE, key); 
Run Code Online (Sandbox Code Playgroud)

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

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

本文中,您可以了解有关加密的更多信息.


dsg*_*fin 6

这篇博文应该完美地解释给你.

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

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

Keytool命令:

 keytool -genkeypair -alias mykeystore -keypass lala -keystore
 mykeystore.pfx -storepass lala -validity 10000 -keyalg RSA -keysize
 2048 -storetype pkcs12
Run Code Online (Sandbox Code Playgroud)

这将生成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

  • @ EugeneMayevski'EldoSCorp--人们会感谢那些帮助/回答/指导他们正确方向而不是找错或纠正问题的人.希望你能把你的努力放在别人的正确位置.谢谢. (3认同)
  • @ EugeneMayevski'EldoSCorp为什么你不重新编辑它,如果它让你这么烦恼? (3认同)
  • ...或者你可以在任何地方拿出"算法"这个词,现在问题很好. (2认同)