gpt4 book ai didi

java - openssl smime - 通过 Java 解密 PEM 编码的文件

转载 作者:行者123 更新时间:2023-11-30 10:08:44 25 4
gpt4 key购买 nike

我正在尝试使用 java 解码 PEM 编码文件。已经发布了一个非常相似的问题,但是它针对的是 DER 编码文件,而不是 PEM 编码文件。

openssl -decrypt by Java

那里使用的 CMSEnvelopedDataParser 似乎不适合我的工作。我可以用什么代替?我正在努力在网上找到一个有效的例子。任何片段将不胜感激。

要重现问题,只需按照以下步骤操作即可。

openssl req -nodes -new -x509 -keyout private.pem -out cert.cert
openssl rsa -pubout -in private.pem -out public.pem
openssl smime -encrypt -outform PEM -inkey public.pem -in text.txt -out text.txt.pem cert.cert

然后我尝试用 java 替换的命令如下:

openssl smime -decrypt -inform PEM -in text.txt.pem -out dec.txt -inkey private.pem

最佳答案

PEM 格式(现在实际的 PEM 已经消失)大部分(包括此处)在 base64 中用换行符和 ----BEGIN x------ 编码的 DER ----END x----- 添加行;见https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail .

Bouncy 提供了一组相关的类来处理 PEM:

org.bouncycastle.util.io.pem.PemObject obj = new org.bouncycastle.util.io.pem.PemReader(reader).readPemObject();
// where reader is a java.io.Reader that reads the PEM such as a FileReader on a file
if( !obj.getType().equals("PKCS7") ) throw error; // or maybe CMS -- optional
... CMSEnvelopedDataParser (obj.getContent()) and on from there

或者自己做 Q&D 的方式是这样的:

StringBuilder b64 = new StringBuilder();
try( Reader rdr = new BufferedReader (new FileReader (filename)) ){
for( String line; (line = rdr.readLine()) != null; )
if( !line.startsWith ("-----") ) b64.append (line);
// else optionally check for errors?
} // or use a Stream/filter/collect if you prefer
byte[] der = Base64.getDecoder().decode(pem);
... CMSEnvelopedDataParser (der) and on from there

关于java - openssl smime - 通过 Java 解密 PEM 编码的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53659376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com