首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >openssl smime -decrypt PEM编码文件

openssl smime -decrypt PEM编码文件
EN

Stack Overflow用户
提问于 2018-12-07 04:43:46
回答 1查看 298关注 0票数 2

我正在尝试解码一个PEM编码的文件使用java。已经发布了一个非常类似的问题,但是它是针对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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-07 10:30:30

PEM格式(现在实际的PEM已经消失了)主要(包括这里)在base64中编码,添加了换行符、----BEGIN x----------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 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53659376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档