cryptography - 在 python 3.6 中使用 pycryptodome 或密码学。如何做到这一点?
问题描述
想象以下消息:
“这是给签名者的消息”
我需要使用 Python 3.6 中的“pycryptodome”或“cryptography”使用以下标准对该示例消息进行签名:
- 格式:x.509;
- 字符集:UTF-8;
- 编码:Base64;
- PKCS1 v1.5;
- 大小:1024位;
- 消息格式:SHA-1;
我有所需的“privatekey.pem”,但我不知道如何在 pycryptodome 或密码学中做到这一点。
更新:我找到了这个示例代码,但仍然不知道它是否是根据原始消息中定义的标准实现我需要的正确方法。示例代码(用于 pycryptodome):
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA1
import base64
from base64 import b64encode, b64decode
key = open('privatekey.pem', "r").read()
rsakey = RSA.importKey(key)
signer = PKCS1_v1_5.new(rsakey)
digest = SHA1.new()
data = 'This the message to be signed'
digest.update(b64decode(data))
sign = signer.sign(digest)
doc = base64.b64encode(sign)
print(doc)
我可以看到我得到了一个 172 个字符的签名哈希,但需要专业的建议才能知道这是否符合我描述的标准,以及它是否是正确的做法。
解决方案
这是一个代码片段,改编自适用的文档页面:
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA1
from Crypto.PublicKey import RSA
from base64 import b64encode
message = 'This the message to be signed'
key = RSA.import_key(open('private_key.der').read())
h = SHA1.new(message)
signature = pkcs1_15.new(key).sign(h)
print(b64encode(signature))
推荐阅读
- php - 致命错误:无法声明类 XMLParser,因为该名称已在第 17 行的 C:\Apache24\htdocs\inc\class_xml.php 中使用
- entity-framework - Entity Framework Core 3.1 - 创建安全的自引用一对多关系
- python - 使用跟踪时 Spinbox IntVar textvariable 上的 get() 错误
- php - PHP 中的 FTP_PUT 和远程文件系统
- python - 编写代码以在 sklearn 中生成两个圆,半径 r1=2 和 r2=5,中心位于 (5,3)
- python - blender api image.save() 总是创建纯黑色图像
- c# - Label text color change failed
- excel - 两次内的小时总和
- java - 不能重载方法?
- mongodb - MongoDB atlas 触发器出现错误:TypeError: Cannot access member 'db' of undefined