使用pycrypto PKCS#7创建签名

Chr*_*ris 5 python pkcs#7

我正在查看PassBook的Apple文档,我需要:

  • 创建"清单文件的PKCS#7分离签名".

我理想情况下喜欢用Python做这件事,我理想的是喜欢使用pycrypto来完成任务,麻烦的是,我在网上找不到任何关于如何做到这一点的示例代码,这里有很多代码:

from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA

message = 'To be encrypted'
h = SHA.new(message)

key = RSA.importKey(open('pubkey.der').read())
cipher = PKCS1_v1_5.new(key)
ciphertext = cipher.encrypt(message+h.digest())
Run Code Online (Sandbox Code Playgroud)

但对PKCS#7的细节不太了解,我不知道我需要做什么......

有没有人有任何想法?

谢谢

Why*_*ugo 10

这个答案的帮助下,我做到了!

我知道op可能已经过了这个,但这个答案在互联网上没有,所以这是解决方案,为了后人的缘故!

from OpenSSL import crypto

with open(cert) as cert_file:
    cert_buf = cert_file.read()

with open(key) as key_file:
    key_buf = key_file.read()

pkey = crypto.load_privatekey(crypto.FILETYPE_PEM, key_buf)
signcert = crypto.load_certificate(crypto.FILETYPE_PEM, cert_buf)

bio_in = crypto._new_mem_buf(text.encode())
PKCS7_NOSIGS = 0x4  # defined in pkcs7.h
pkcs7 = crypto._lib.PKCS7_sign(signcert._x509, pkey._pkey, crypto._ffi.NULL, bio_in, PKCS7_NOSIGS)  # noqa
bio_out = crypto._new_mem_buf()
crypto._lib.i2d_PKCS7_bio(bio_out, pkcs7)
sigbytes = crypto._bio_to_string(bio_out)
Run Code Online (Sandbox Code Playgroud)

请记住,它使用了一些未记录的pyopenssl函数.