登录
首页 >  Golang >  Go问答

提取p7m文件内容

来源:stackoverflow

时间:2024-03-26 09:45:30 316浏览 收藏

本文介绍了使用 go.mozilla.org/pkcs7 包从 .p7m 文件中提取内容。该示例代码最初遇到了“ber2der:无效的 ber 格式”错误,但通过添加编码/pem 包并使用 pem.Encode 编码文件内容解决了该问题。

问题内容

我正在寻求修复我的代码,以便像运行简单的 bash 命令一样获取 .p7m 文件内容:

openssl smime -decrypt -verify -inform der -in testdocument.pdf.p7m -noverify -out testdocument.pdf

所以我想用 go 来实现它,并找到了 go.mozilla.org/pkcs7 包和如下示例:

package main

import (
    "io/ioutil"
    "log"

    "go.mozilla.org/pkcs7"
)

func main() {
    content, err := ioutil.ReadFile("TestDocument.pdf.p7m")
    if err != nil {
        log.Fatal(err)
    }
    p7, err := pkcs7.Parse(content)
    if err != nil {
        log.Fatal(err)
    }
    if err := ioutil.WriteFile("TestDocument.pdf", p7.Content, 0777); err != nil {
        log.Fatal(err)
    }
}

并编译它,我收到此错误:ber2der:无效的 ber 格式。 你能帮我解决这个问题吗?


解决方案


我修复了它,遗漏了一小部分:

package main

import (
    "encoding/pem"
    "io/ioutil"
    "log"
    "os"

    "go.mozilla.org/pkcs7"
)

func main() {
    content, err := ioutil.ReadFile("TestDocument.pdf.p7m")
    if err != nil {
        log.Fatal(err)
    }
    p7, err := pkcs7.Parse(content)
    if err != nil {
        log.Fatal(err)
    }
    pem.Encode(os.Stdout, &pem.Block{Type: "PKCS7", Bytes: content})
    if err := ioutil.WriteFile("TestDocument.pdf", p7.Content, 0777); err != nil {
        log.Fatal(err)
    }
}

理论要掌握,实操不能落!以上关于《提取p7m文件内容》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>