Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java PKCS12密钥库中的证书加密和解密文件?_Java_Cryptography_Pkcs#12 - Fatal编程技术网

如何使用java PKCS12密钥库中的证书加密和解密文件?

如何使用java PKCS12密钥库中的证书加密和解密文件?,java,cryptography,pkcs#12,Java,Cryptography,Pkcs#12,有人能解释一下如何使用存储在java“PKCS12”密钥库中的证书加密和解密文件吗? 对PEM文件使用PKCS12加密 要运行它,首先需要PFX Personal中的Java密钥库 文件交换格式 Keytool命令: 这将生成mykeystore.pfx文件。可以导入此文件 作为Firefox中的证书 Key key = store.getKey("alias_for_key", password.toCharArray()); 导入-打开Firefox–工具–选项–高级–查看证书–您的证书–

有人能解释一下如何使用存储在java“PKCS12”密钥库中的证书加密和解密文件吗?

对PEM文件使用PKCS12加密

要运行它,首先需要PFX Personal中的Java密钥库 文件交换格式

Keytool命令:

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

Key key = store.getKey("alias_for_key", password.toCharArray());
导入-打开Firefox–工具–选项–高级–查看证书–您的证书–导入–选择PFX文件–导入

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

一,。私钥

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

二,。公钥

其次,需要使用公钥对文件进行加密。但首先需要公钥

三,。用公钥加密

现在您有了公钥,可以对文件进行加密了

四,。用私钥解密

所以现在文件被加密了,它可以被发送/存储,以便接收方…接收并解密它。要解密它,我们需要私钥,幸运的是它保存/存储在Private.pem文件中

五,。使用AES密钥进行加密/解密

另一种加密/解密东西的方法是通过AES 256位密钥。密钥将随机生成每个文件并写入文件系统。然后可以使用上述RSA机制加密此AES密钥。这将提高大型文件的加密性能


来源-

正如提到的尤金·梅耶夫斯基,你的问题是错误的,无法以其原始形式得到回答。但我会尽力为你澄清一下加密格式用于存储证书和私钥。加密或解密数据时,使用PKCS12容器的密码实现和内容

Java内置了对PKCS12密钥库的支持,使用这种容器与standart JKS密钥库没有太大区别

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

KeyStore store = KeyStore.getInstance(KeyStore.getDefaultType());
store.load(is, password.toCharArray());
和加载PKCS12密钥库的代码

KeyStore store = KeyStore.getInstance("PKCS12");
store.load(is, password.toCharArray());
之后,您可以无限访问密钥库内容。通过Firefox中的导入/导出,您可以获得存储在密钥库中的证书和密钥,而无需执行这种奇怪的操作

Key key = store.getKey("alias_for_key", password.toCharArray());
接下来,当您拥有密钥和证书时,就是加密。用于加密。您需要密码类的实例

Cipher c = Cipher.getInstance(key.getAlgorithm());
c.init(Cipher.ENCRYPT_MODE, key); 
准备加密的密码。若加密数据相对较小,则可以使用更新方法,另一种方法是创建CipherOutputStream

要解密,只需使用不同模式的init密码,取决于加密算法、密钥。对于对称算法密钥将相同,对于非对称算法加密使用公钥,而对于解密使用私钥


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

谢谢您的即时回复。.pfx和PEM文件是如何使用的?@Sasha pfx文件通常是包含加密私钥的文件,通常受密码保护,PEM基本上是包含私钥的文件,如果您希望稍后更新扩展,这将非常有用point@EugeneMayevskiEldoSCorp——人们会感谢帮助/回答/引导他们走向正确方向的人,而不是找出错误或纠正问题的人。希望你能把自己的努力放在正确的位置。谢谢。@EugeneMayevski'EldoSCorp如果你这么不高兴,为什么不重新编辑它?…或者你可以在提到的地方去掉“算法”这个词,现在问题就好了。PKCS12不是加密算法,所以你的问题毫无意义。这个问题及其答案对我很有帮助。对于当前文本和主题行,它应该重新打开。我认为基于PKCS12的密钥存储使用包含数字的字符串作为别名,您不能只使用任何别名,您将别名存储在PKCS12密钥存储?的何处?。但我必须承认我不是100%确定。PKCS12提供了比JKS更强的加密算法。切换到PKCS12可提高密钥库的完整性和机密性。