-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpubley_test.py
More file actions
46 lines (34 loc) · 1.42 KB
/
Copy pathpubley_test.py
File metadata and controls
46 lines (34 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import Crypto
import Crypto.Random
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
import binascii
# RSAの鍵ペアを作成する
def generate_rsa_key_pair():
random_gen = Crypto.Random.new().read
private_key = RSA.generate(2048, random_gen)
public_key = private_key.publickey()
return public_key, private_key
# 与えられた秘密鍵を使ってメッセージを署名する
def compute_digital_signature(message, private_key):
# まずメッセージをハッシュ値に変換する
hashed_message = SHA256.new(message.encode('utf8'))
# 署名にはRSASSA-PKCKS1-v1_5を利用する
signer = PKCS1_v1_5.new(private_key)
return binascii.hexlify(signer.sign(hashed_message)).decode('ascii')
def verify_signature(message, signature, pub_key):
hashed_message = SHA256.new(message.encode('utf8'))
verifier = PKCS1_v1_5.new(pub_key)
return verifier.verify(hashed_message, binascii.unhexlify(signature))
def main():
test_txt = "This is test message for getting understand about digital signature"
pubkey, privkey = generate_rsa_key_pair()
# デジタル署名を生成する
signed = compute_digital_signature(test_txt, privkey)
print('signed :', signed)
# デジタル署名を検証する
result = verify_signature(test_txt, signed, pubkey)
print('result :', result)
if __name__ == '__main__':
main()