python - 使用 pycrypto PKCS#7 创建签名

标签 python pkcs#7

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

  • 创建“ list 文件的 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 的细节了解不够,我不知道我需要做什么...

有没有人有什么想法?

谢谢

最佳答案

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 函数。

关于python - 使用 pycrypto PKCS#7 创建签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16284225/

相关文章:

python - `pipenv install` 成功从 GitLab 项目的 PyPI 注册表安装包,但随后在锁定步骤中失败

python - 保留作为序列一部分的数组的第一个元素

python - Pandas - 计算每个 id 中的值序列

python - 如何基于周保存到 .csv 文件中

java - 从java中的.p7b文件中提取个人.cer证书

ios - Bundle.main.url(forResource : "AppleIncRootCertificate", withExtension: "cer") == nil

c++ - gcrypt 是针对哪个版本的 PKCS#1 规范实现的?

Python+Pygame glibc错误

encryption - 在 CBC 模式下使用 AES 并在 PKCS#7 内部使用 ISO 10126 填充时,算法标识符是什么?

java - pkcs7 文件验证问题