gpt4 book ai didi

python - 使用 pycrypto (RSA) 签名和验证数据

转载 作者:IT老高 更新时间:2023-10-28 20:44:32 24 4
gpt4 key购买 nike

我正在尝试熟悉 pycrypto 模块,但缺乏清晰的文档使事情变得困难。

首先,我想了解签名和验证数据。有人可以提供一个示例来说明如何编写吗?

最佳答案

这是 example in the old PyCrypto documentation: 的充实版本

确保您使用的是 pycryptodom 而不是 pycrypto(未维护!)

pycryptodome 可以使用 pip install pycryptodome

安装
import Crypto.Hash.MD5 as MD5
import Crypto.PublicKey.RSA as RSA
import Crypto.PublicKey.DSA as DSA
import Crypto.PublicKey.ElGamal as ElGamal
import Crypto.Util.number as CUN
import os

plaintext = 'The rain in Spain falls mainly on the Plain'

# Here is a hash of the message
hash = MD5.new(plaintext).digest()
print(repr(hash))
# '\xb1./J\xa883\x974\xa4\xac\x1e\x1b!\xc8\x11'

for alg in (RSA, DSA, ElGamal):
# Generates a fresh public/private key pair
key = alg.generate(384, os.urandom)

if alg == DSA:
K = CUN.getRandomNumber(128, os.urandom)
elif alg == ElGamal:
K = CUN.getPrime(128, os.urandom)
while CUN.GCD(K, key.p - 1) != 1:
print('K not relatively prime with {n}'.format(n=key.p - 1))
K = CUN.getPrime(128, os.urandom)
# print('GCD({K},{n})=1'.format(K=K,n=key.p-1))
else:
K = ''

# You sign the hash
signature = key.sign(hash, K)
print(len(signature), alg.__name__)
# (1, 'Crypto.PublicKey.RSA')
# (2, 'Crypto.PublicKey.DSA')
# (2, 'Crypto.PublicKey.ElGamal')

# You share pubkey with Friend
pubkey = key.publickey()

# You send message (plaintext) and signature to Friend.
# Friend knows how to compute hash.
# Friend verifies the message came from you this way:
assert pubkey.verify(hash, signature)

# A different hash should not pass the test.
assert not pubkey.verify(hash[:-1], signature)

关于python - 使用 pycrypto (RSA) 签名和验证数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4232389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com