반응형
나는 pycrypto 모듈에 익숙해 지려고 노력하고 있지만 명확한 문서가 없기 때문에 일이 어려워집니다.
우선 데이터 서명 및 확인을 이해하고 싶습니다. 누군가 이것이 어떻게 쓰여질 지에 대한 예를 제공 할 수 있습니까?
해결 방법
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)
참조 페이지 https://stackoverflow.com/questions/4232389
반응형
'파이썬' 카테고리의 다른 글
파이썬 ufunc 'add' did not contain loop with signature matching type dtype ('S32') ('S32') ('S32') (0) | 2020.10.24 |
---|---|
파이썬 내 파이썬 객체가 숫자인지 어떻게 확인할 수 있습니까? (0) | 2020.10.23 |
파이썬 Python 데이터 프레임 열의 각 행에서 처음 x 개의 문자 제거 (0) | 2020.10.23 |
파이썬 How to make python scripts executable on Windows? (0) | 2020.10.23 |
파이썬의 유니 코드 문자열에서 바이트 얻기 (0) | 2020.10.23 |
댓글