-
Notifications
You must be signed in to change notification settings - Fork 0
/
source_RSA.py
65 lines (59 loc) · 2.33 KB
/
source_RSA.py
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
from Crypto.Signature import PKCS1_v1_5 as PKCS1_v1_5_2
from Crypto.Signature import PKCS1_PSS
from Crypto.Hash import SHA1, SHA256
from OpenSSL import crypto, SSL
# -*- coding: utf8 -*-
from tkinter import *
import tkinter.ttk
from tkinter import filedialog
def generate_key(file_contains_public, file_contains_private, mode, size):
key = RSA.generate(size)
with open(file_contains_private, 'wb') as file:
file.write(key.exportKey(mode))
with open(file_contains_public, 'wb') as file:
file.write(key.publickey().exportKey(mode))
def encrypt_rsa(plaintext, file_contains_key, mode):
with open(file_contains_key, 'rb') as file:
key = RSA.importKey(file.read())
cipher = PKCS1_v1_5.new(key)
return cipher.encrypt(plaintext)
def decrypt_rsa(ciphertext, file_contains_key, mode):
with open(file_contains_key, 'rb') as file:
key = RSA.importKey(file.read())
plaintext = PKCS1_v1_5.new(key)
return plaintext.decrypt(ciphertext,'sentinel')
def verify_sign(data_to_verify, file_contains_signature, file_contains_key):
with open(file_contains_signature, 'rb') as file:
signature = file.read()
key = RSA.importKey(open(file_contains_key, "rb").read())
print(type(key))
verifier = PKCS1_v1_5_2.new(key)
hashingtext = SHA256.new(data_to_verify)
print(hashingtext.hexdigest().encode())
print(signature)
if verifier.verify(hashingtext, signature):
print ("OK")
else:
print ("Invalid")
def sign_digital(hashingtext, file_contains_key):
with open(file_contains_key, 'rb') as file:
key = RSA.importKey(file.read())
cipher = PKCS1_v1_5_2.new(key)
signature = cipher.sign(hashingtext)
print(signature)
with open('signature.sig', 'wb') as file:
file.write(signature)
#plaintext = 'Huynh Truong Minh Quang'.encode()
with open('testjpg.jpg', 'rb') as file:
plaintext = file.read()
#Mode = ['DER', 'PEM']
#generate_key('rsapub.' + Mode[1], 'rsapri.' + Mode[1], Mode[1], 1024)
#enc = encrypt_rsa(plaintext, 'rsapub.' + Mode[1], Mode[1])
#plain = enc.hex()
#print(plain)
#dec = decrypt_rsa(bytearray.fromhex(plain), 'rsapri.' + Mode[1], Mode[1])
#print(dec.decode())
#sign_digital(hashingtext, 'rsapri.der')
verify_sign(plaintext, 'firstsignature.sig', 'rsapub.der')