这是文档中示例的丰富版本:
import Crypto.Hash.MD5 as MD5import Crypto.PublicKey.RSA as RSAimport Crypto.PublicKey.DSA as DSAimport Crypto.PublicKey.ElGamal as ElGamalimport Crypto.Util.number as CUNimport osplaintext = 'The rain in Spain falls mainly on the Plain'# Here is a hash of the messagehash = MD5.new(plaintext).digest()print(repr(hash))# 'xb1./Jxa883x974xa4xacx1ex1b!xc8x11'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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)