我正在使用 Python 的 pkcs11 包来访问存储在 Yubikey 5 上的 X.509 证书。使用 pkcs11 对象访问证书、公钥和私钥工作正常,签名和签名验证也是如此。然而,对于我的一生,我无法弄清楚为什么使用公钥加密不起作用。这是我的代码:
import pkcs11
from pkcs11 import Attribute, ObjectClass, KeyType, util
lib = pkcs11.lib('/usr/lib/x86_64-linux-gnu/pkcs11/onepin-opensc-pkcs11.so')
token = lib.get_token(token_label='PIV Card Holder pin (PIV_II)'
session = token.open(user_pin=pin)
# Getting a private and a public key as pkcs11 Object
private = next(session.get_objects({
Attribute.CLASS: ObjectClass.PRIVATE_KEY,
}))
public = next(session.get_objects({
Attribute.CLASS: ObjectClass.PUBLIC_KEY,
}))
data = 'Hello, world!'
sig = private.sign(data) # Works!
sig_verif = public.verify(data, sig) # Works!
print("Signature is valid? "+str(sig_verif)) # True
# So …Run Code Online (Sandbox Code Playgroud) 我需要能够在 Python 中生成、保存和读取 CMS/PKCS#7 数据。似乎可以使用asn1crypto库来完成,但是我很难找到可以将数据保存到磁盘(以 PEM/DER 格式)的函数。在 asn1crypto/tests/test_cms.py 中有一个测试平台,但它只展示了如何从文件中读取 CMS / PKCS#7 数据并将其存储到相应的 asn1crypto.cms 对象中。我找不到手册,甚至找不到 asn1crypto.cms 函数(方法)列表。
现在,我能够生成所有必要的部分,例如签名、加密数据、对称密钥等,所以我需要做的是找到一种方法将它们融合到 CMS / PKCS#7 兼容的文件格式中。基本上,我正在为 shellopenssl cms和openssl engine功能寻找等效的 Python 流程。展示如何创建和保存 CMS 对象(例如,SignedData、EnvelopedData 等)的简单 Python 示例将大有帮助。
python cryptography content-management-system pkcs#7 asn1crypto