2013-04-29 86 views
3

我期待在苹果文档的存折,我需要:使用pycrypto PKCS#7创建签名

  • 创建一个“清单文件的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()) 

,但不知道有关的PKCS#7,我不知道我需要做的细节不够......

有没有人有什么想法?

感谢

+0

由于这已经有几年了,你有没有找到解决方案? – WhyNotHugo 2015-08-15 00:04:50

回答

3

this answer很多的帮助,我做到了!

我知道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) 

请记住,它使用一些未公开的pyopenssl函数。