首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PKCS7 (签名和数据)中提取分离的PKCS7签名

从PKCS7 (签名和数据)中提取分离的PKCS7签名
EN

Stack Overflow用户
提问于 2014-08-03 14:10:52
回答 1查看 1.1K关注 0票数 2

我想将包含数据+签名的PKCS7签名分解为单独的:原始数据&在python中分离PKCS7签名。

我可以从签名中获取数据,因为验证例程会返回它,但是如何获得分离的签名呢?

代码语言:javascript
复制
def verify_pkcs7(data_bio, signature_bio, cacert_bio, format=X509.FORMAT_PEM):
    sm_obj = SMIME.SMIME()
    st = X509.X509_Store()

    st.add_cert(X509.load_cert_string(cacert_bio))
    sm_obj.set_x509_store(st)


    if format == X509.FORMAT_PEM:
        p7 = SMIME.load_pkcs7_bio(signature_bio)
    else:
        p7 = SMIME.PKCS7(m2.pkcs7_read_bio_der(signature_bio._ptr()), 1)


    sk = p7.get0_signers(X509.X509_Stack())
    sm_obj.set_x509_stack(sk)

    try:
        v = sm_obj.verify(p7, data_bio)
        if v:
            print "Client signature verified."
            with open('file.rar', 'wb') as ff:
                ff.write(v)
    except Exception as e:
        print str(e)
        print "*** INVALID CLIENT MESSAGE SIGNATURE ***"

我的猜测是它是这些函数之一。我的假设是,M2Crypto是OpenSSL的包装器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-07 07:47:25

M2Crypto.SMIME.smime_load_pkcs7_bio函数将接受一个包含SMIME消息(由消息数据和PKCS7签名组成)的BIO缓冲区,并返回两个值的元组:一个PKCS7对象和一个包含消息数据的BIO。您可以将PKCS7签名作为文本使用它的.write(buf)和另一个BIO

但是,请注意,M2Crypto (仍然)不支持Python3,因此您将被限制为2.7。

这方面的M2Crypto“文档”不值得链接,但这似乎是所使用的底层OpenSSL函数:PKCS7(3)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25105511

复制
相关文章

相似问题

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