Last active
November 23, 2018 19:38
-
-
Save ancs21/48f42494e425e64525afc5f536448a47 to your computer and use it in GitHub Desktop.
AES-256 ECB and DES with PyCrypto
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from Crypto.PublicKey import RSA | |
from Crypto.Cipher import PKCS1_OAEP | |
from Crypto.Signature import PKCS1_v1_5 | |
from Crypto.Hash import SHA512, SHA384, SHA256, SHA, MD5 | |
from Crypto import Random | |
from base64 import b64encode, b64decode | |
def newkeys(keysize): | |
random_generator = Random.new().read | |
key = RSA.generate(keysize, random_generator) | |
private, public = key, key.publickey() | |
return public, private | |
def importKey(externKey): | |
return RSA.importKey(externKey) | |
def getpublickey(priv_key): | |
return priv_key.publickey() | |
def encrypt(message, pub_key): | |
#RSA encryption protocol according to PKCS#1 OAEP | |
cipher = PKCS1_OAEP.new(pub_key) | |
return cipher.encrypt(message) | |
def decrypt(ciphertext, priv_key): | |
#RSA encryption protocol according to PKCS#1 OAEP | |
cipher = PKCS1_OAEP.new(priv_key) | |
return cipher.decrypt(ciphertext) | |
def sign(message, priv_key): | |
signer = PKCS1_v1_5.new(priv_key) | |
digest = SHA.new() | |
digest.update(message) | |
return signer.sign(digest) | |
def verify(message, signature, pub_key): | |
signer = PKCS1_v1_5.new(pub_key) | |
digest = SHA.new() | |
digest.update(message) | |
return signer.verify(digest, signature) | |
msg1 = "Hello Ton" | |
keysize = 2048 | |
(public, private) = newkeys(keysize) | |
encrypted = b64encode(encrypt(msg1, public)) | |
decrypted = decrypt(b64decode(encrypted), private) | |
signature = b64encode(sign(msg1, private)) | |
verify2 = verify('Hello Ton', b64decode(signature), public) | |
# print(private.exportKey('PEM')) | |
# print(public.exportKey('PEM')) | |
# print("Encrypted: " + encrypted) | |
# print("Decrypted: '%s'" % decrypted) | |
# print("Signature: " + signature) | |
# print("Verify: %s" % verify) | |
print("Verify: %s" % verify2) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
from Crypto.Cipher import DES3 | |
from Crypto.Cipher import AES | |
from Crypto import Random | |
# 1. Sinh khóa và lưu khóa | |
key = b'abcdefgh12345678' | |
# 2. Đọc khóa và tạo mật mã / giải mật mã DES (ECB, CBC) | |
iv = Random.new().read(DES3.block_size) | |
cipher_mode_ecb = DES3.new(key, DES3.MODE_ECB , iv) | |
cipher_mode_cbc = DES3.new(key, DES3.MODE_CBC , iv) | |
plaintext = b'I do it!' | |
# ma hoa | |
msg_ecb = iv + cipher_mode_ecb.encrypt(plaintext) | |
msg_cbc = iv + cipher_mode_cbc.encrypt(plaintext) | |
# print(msg_ecb) | |
# print(msg_cbc) | |
# # giai ma | |
# print(cipher_mode_ecb.decrypt(msg_ecb)) | |
# # 3. Đọc khóa và tạo mật mã / giải mật mã AES (ECB) | |
# iv = Random.new().read(AES.block_size) | |
# cipher = AES.new(key, AES.MODE_ECB, iv) | |
# msg = iv + cipher.encrypt(b'I do itRight now') | |
# print(msg) | |
# 4. Xây dựng Demo – giao diện đồ họa (tham khảo buổi 1) | |
from Tkinter import * | |
window = Tk() | |
window.title("Demo ATBMTT") | |
lb0 = Label(window, text=" ", font=("Arial Bold", 10)) | |
lb0.grid(column=0, row=0) | |
lb1 = Label(window, text="Chuong trinh demo", font=("Arial Bold", 20)) | |
lb1.grid(column=1, row=1) | |
lb2 = Label(window, text="Mat ma Afine", font=("Arial Bold", 15)) | |
lb2.grid(column=0, row=2) | |
plainlb3 = Label(window, text="Plain text", font=("Arial Bold", 14)) | |
plainlb3.grid(column=0, row=3) | |
plaintxt = Entry(window, width=20) | |
plaintxt.grid(column=1, row=3) | |
KEYlb4 = Label(window, text="KEY PAIR",font=("Arial", 14)) | |
KEYlb4.grid(column=2, row=3) | |
KEYA1 = Entry(window,width=3) | |
KEYA1.grid(column=3, row=3) | |
KEYB1 = Entry(window,width=5) | |
KEYB1.grid(column=4, row=3) | |
lb5 = Label(window, text="CIPHER TEXT",font=("Arial", 14)) | |
lb5.grid(column=0, row=4) | |
ciphertxt3 = Entry(window,width=20) | |
ciphertxt3.grid(column=1, row=4) | |
denctxt3 = Entry(window,width=20) | |
denctxt3.grid(column=3, row=4) | |
def Char2Num(c): | |
return ord(c)-65 | |
def Num2Char(n): | |
return chr(n+65) | |
def xgcd(b, a): | |
tmp = a | |
x0, x1, y0, y1 = 1, 0, 0, 1 | |
while a != 0: | |
q, b, a = b//a, a, b%a | |
x0, x1 = x1, x0 - q*x1 | |
y0, y1 = y1, y0 - q*y1 | |
if x0 < 0: | |
x0 = tmp + x0 | |
return x0 | |
def encryptAF(txt,a,b,m): | |
r="" | |
for c in txt: | |
e = (a*Char2Num(c)+b )%m | |
r = r + Num2Char(e) | |
return r | |
def decryptAF(txt,a,b,m): | |
r = "" | |
a1 = xgcd(a,m) | |
for c in txt: | |
e = (a1*(Char2Num(c)-b ))%m | |
r = r + Num2Char(e) | |
return r | |
def clicked(): | |
a, b, m = int(KEYA1.get()),int(KEYB1.get()),26 | |
entxt = encryptAF(plaintxt.get(),a,b,m) | |
ciphertxt3.delete(0,END) | |
#a=int(KEYA1.get()) | |
ciphertxt3.insert(INSERT,entxt) | |
def giaima(): | |
a,b,m=int(KEYA1.get()),int(KEYB1.get()),26 | |
detxt=decryptAF(ciphertxt3.get(),a,b,m) | |
denctxt3.delete(0,END) | |
#a=int(KEYA1.get()) | |
denctxt3.insert(INSERT,detxt) | |
AFbtn = Button(window, text="Mã Hóa", command=clicked) | |
AFbtn.grid(column=5, row=3) | |
DEAFbtn = Button(window, text="Giải Mã ", command=giaima) | |
DEAFbtn.grid(column=2, row=4) | |
# today | |
lb1 = Label(window, text="Chuong trinh demo mat ma DES", font=("Arial Bold", 20)) | |
lb1.grid(column=1, row=8) | |
cipher_mode_ecb = None | |
def ma_hoa_ecb(): | |
iv = Random.new().read(DES3.block_size) | |
cipher_mode_ecb = DES3.new(key, DES3.MODE_ECB , iv) | |
global cipher_mode_ecb | |
plaintext = mh_des_ecb_entry.get() | |
msg_ecb = iv + cipher_mode_ecb.encrypt(plaintext) | |
clipher_des_ecb_entry.delete(0,END) | |
clipher_des_ecb_entry.insert(INSERT,msg_ecb) | |
def giai_ma_ecb(): | |
plain_text = cipher_mode_ecb.decrypt(clipher_des_ecb_entry.get()) | |
decrypt_mh_des_ecb_entry.delete(0, END) | |
decrypt_mh_des_ecb_entry.insert(INSERT, plain_text[8:]) | |
# plain text | |
mh_des_ecb = Label(window, text="Ma hoa ECB", font=("Arial Bold", 14)) | |
mh_des_ecb.grid(column=0, row=9) | |
mh_des_ecb_entry = Entry(window, width=20) | |
mh_des_ecb_entry.grid(column=1, row=9) | |
mh_des_ecb_btn = Button(window, text="Ma hoa", command=ma_hoa_ecb) | |
mh_des_ecb_btn.grid(column=2, row=9) | |
# clipher text | |
clipher_des_ecb = Label(window, text="Clipher text", font=("Arial Bold", 14)) | |
clipher_des_ecb.grid(column=0, row=10) | |
clipher_des_ecb_entry = Entry(window, width=20) | |
clipher_des_ecb_entry.grid(column=1, row=10) | |
# gia ma | |
decrypt_mh_des_ecb = Label(window, text="Giai ma DES-ECB", font=("Arial Bold", 14)) | |
decrypt_mh_des_ecb.grid(column=0, row=11) | |
decrypt_mh_des_ecb_entry = Entry(window, width=20) | |
decrypt_mh_des_ecb_entry.grid(column=1, row=11) | |
decrypt_mh_des_ecb_btn = Button(window, text="Giai ma", command=giai_ma_ecb) | |
decrypt_mh_des_ecb_btn.grid(column=2, row=11) | |
# DES-CBC | |
cipher_mode_cbc = None | |
def ma_hoa_cbc(): | |
iv = Random.new().read(DES3.block_size) | |
cipher_mode_cbc = DES3.new(key, DES3.MODE_CBC , iv) | |
global cipher_mode_cbc | |
plaintext = mh_des_cbc_entry.get() | |
# print(plaintext) | |
msg_cbc = iv + cipher_mode_cbc.encrypt(plaintext) | |
clipher_des_cbc_entry.delete(0,END) | |
clipher_des_cbc_entry.insert(INSERT,msg_cbc) | |
def giai_ma_cbc(): | |
plain_text = cipher_mode_cbc.decrypt(clipher_des_cbc_entry.get()) | |
decrypt_mh_des_cbc_entry.delete(0, END) | |
decrypt_mh_des_cbc_entry.insert(INSERT, plain_text[8:]) | |
# plain text | |
mh_des_cbc = Label(window, text="Ma hoa cbc", font=("Arial Bold", 14)) | |
mh_des_cbc.grid(column=0, row=12) | |
mh_des_cbc_entry = Entry(window, width=20) | |
mh_des_cbc_entry.grid(column=1, row=12) | |
mh_des_cbc_btn = Button(window, text="Ma hoa", command=ma_hoa_cbc) | |
mh_des_cbc_btn.grid(column=2, row=12) | |
# clipher text | |
clipher_des_cbc = Label(window, text="Cipher text", font=("Arial Bold", 14)) | |
clipher_des_cbc.grid(column=0, row=13) | |
clipher_des_cbc_entry = Entry(window, width=20) | |
clipher_des_cbc_entry.grid(column=1, row=13) | |
# gia ma | |
decrypt_mh_des_cbc = Label(window, text="Giai ma DES-cbc", font=("Arial Bold", 14)) | |
decrypt_mh_des_cbc.grid(column=0, row=14) | |
decrypt_mh_des_cbc_entry = Entry(window, width=20) | |
decrypt_mh_des_cbc_entry.grid(column=1, row=14) | |
decrypt_mh_des_cbc_btn = Button(window, text="Giai ma", command=giai_ma_cbc) | |
decrypt_mh_des_cbc_btn.grid(column=2, row=14) | |
# AES | |
lb2 = Label(window, text="Chuong trinh demo mat ma AES-ECB", font=("Arial Bold", 20)) | |
lb2.grid(column=1, row=15) | |
cipher_mode_aes_ecb = None | |
def ma_hoa_aes_ecb(): | |
iv = Random.new().read(AES.block_size) | |
cipher_mode_aes_ecb = AES.new(key, AES.MODE_ECB, iv) | |
global cipher_mode_aes_ecb | |
plaintext = mh_des_aes_ecb_entry.get() | |
msg_aes_ecb = iv + cipher_mode_aes_ecb.encrypt(plaintext) | |
clipher_des_aes_ecb_entry.delete(0,END) | |
clipher_des_aes_ecb_entry.insert(INSERT,msg_aes_ecb) | |
def giai_ma_aes_ecb(): | |
plain_text = cipher_mode_aes_ecb.decrypt(clipher_des_aes_ecb_entry.get()) | |
decrypt_mh_des_aes_ecb_entry.delete(0, END) | |
decrypt_mh_des_aes_ecb_entry.insert(INSERT, plain_text[16:]) | |
# plain text | |
mh_des_aes_ecb = Label(window, text="Ma hoa aes_ecb", font=("Arial Bold", 14)) | |
mh_des_aes_ecb.grid(column=0, row=16) | |
mh_des_aes_ecb_entry = Entry(window, width=20) | |
mh_des_aes_ecb_entry.grid(column=1, row=16) | |
mh_des_aes_ecb_btn = Button(window, text="Ma hoa", command=ma_hoa_aes_ecb) | |
mh_des_aes_ecb_btn.grid(column=2, row=16) | |
# clipher text | |
clipher_des_aes_ecb = Label(window, text="Clipher text", font=("Arial Bold", 14)) | |
clipher_des_aes_ecb.grid(column=0, row=17) | |
clipher_des_aes_ecb_entry = Entry(window, width=20) | |
clipher_des_aes_ecb_entry.grid(column=1, row=17) | |
# gia ma | |
decrypt_mh_des_aes_ecb = Label(window, text="Giai ma AES - ECB", font=("Arial Bold", 14)) | |
decrypt_mh_des_aes_ecb.grid(column=0, row=18) | |
decrypt_mh_des_aes_ecb_entry = Entry(window, width=20) | |
decrypt_mh_des_aes_ecb_entry.grid(column=1, row=18) | |
decrypt_mh_des_aes_ecb_btn = Button(window, text="Giai ma", command=giai_ma_aes_ecb) | |
decrypt_mh_des_aes_ecb_btn.grid(column=2, row=18) | |
window.geometry('800x600') | |
window.mainloop() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
import Tkinter as tk | |
import random | |
import SHA256 | |
root = tk.Tk() | |
# width x height + x_offset + y_offset: | |
root.geometry("800x600+30+30") | |
def appear(index, letter): | |
# This line would be where you insert the letter in the textbox | |
print letter | |
print index | |
# Disable the button by index | |
i = 0 | |
while i < len(buttons): | |
buttons[i].config(state="normal") | |
i = i+1 | |
buttons[index].config(state="disabled") | |
if letter == 'RSA': | |
l = tk.Label(root, text='Mật mã RSA') | |
l.grid(row=0, column=2, ) | |
elif letter == 'SHA': | |
l = tk.Label(root, text='Mật mã SHA256', font="Monospace 18 normal") | |
l.grid(row=0, column=2, ipadx=50, ipady=20) | |
l1 = tk.Label(root, text="Plaintext", font="Monospace 12 normal").grid(row=1, column=2, ipady=7 ) | |
l1 = tk.Label(root, text="Ciphertext", font="Monospace 12 normal").grid(row=2, column=2, ipady=10) | |
e1 = tk.Entry(root, font="Monospace 12 normal") | |
e2 = tk.Entry(root, font="Monospace 12 normal") | |
e1.grid(row=1, column=3, ipadx=10, ipady=7) | |
e2.grid(row=2, column=3, ipadx=10, ipady=7) | |
b1 = tk.Button(root, text="Hash it", font="Monospace 12 normal" | |
command=SHA256 | |
) | |
b1.grid(row=3, column=3, ipadx=30, ipady=7) | |
letters=["Affine", "DES", "AES", "RSA", "SHA"] | |
# A collection (list) to hold the references to the buttons created below | |
buttons = [] | |
for index in range(5): | |
n=letters[index] | |
button = tk.Button(root, bg="White", text=n, width=5, height=1, relief=tk.GROOVE, | |
command=lambda index=index, n=n: appear(index, n)) | |
# Add the button to the window | |
button.grid(padx=10, pady=10, row=index, column=1, ipadx=30, ipady=7) | |
# Add a reference to the button to 'buttons' | |
buttons.append(button) | |
root.mainloop() | |
root.mainloop() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
import ast | |
import Crypto | |
from Crypto.PublicKey import RSA | |
from Crypto import Random | |
# random_generator = Random.new().read | |
# key = RSA.generate(1024, random_generator) | |
# publickey = key.publickey() | |
# encrypted = publickey.encrypt('encrypt this message', 32) | |
# print encrypted | |
# decrypted = key.decrypt(encrypted) | |
# print decrypted | |
class RSASelf: | |
def __init__(self): | |
self.key = RSA.generate(1024, Random.new().read) | |
self.publickey = self.key.publickey() | |
def encrypt(self, text): | |
return self.publickey.encrypt(text, 32) | |
def decrypt(self, encryptedText): | |
return self.key.decrypt(encryptedText) | |
def export(self): | |
return self.key.exportKey('PEM') | |
rsa = RSASelf() | |
enc = rsa.encrypt('hello world RSA') | |
print enc | |
dec = rsa.decrypt(ast.literal_eval(str(enc))) | |
print dec | |
print rsa.export() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
from Crypto.Cipher import DES3 | |
from Crypto.Cipher import AES | |
from Crypto.PublicKey import RSA | |
from Crypto import Random | |
# 1. Sinh kh�a v� luu kh�a | |
key = b'abcdefgh12345678' | |
# 2. �?c kh�a v� t?o m?t m� / gi?i m?t m� DES (ECB, CBC) | |
iv = Random.new().read(DES3.block_size) | |
cipher_mode_ecb = DES3.new(key, DES3.MODE_ECB , iv) | |
cipher_mode_cbc = DES3.new(key, DES3.MODE_CBC , iv) | |
plaintext = b'I do it!' | |
# ma hoa | |
msg_ecb = iv + cipher_mode_ecb.encrypt(plaintext) | |
msg_cbc = iv + cipher_mode_cbc.encrypt(plaintext) | |
# print(msg_ecb) | |
# print(msg_cbc) | |
# # giai ma | |
# print(cipher_mode_ecb.decrypt(msg_ecb)) | |
# # 3. �?c kh�a v� t?o m?t m� / gi?i m?t m� AES (ECB) | |
# iv = Random.new().read(AES.block_size) | |
# cipher = AES.new(key, AES.MODE_ECB, iv) | |
# msg = iv + cipher.encrypt(b'I do itRight now') | |
# print(msg) | |
# 4. X�y d?ng Demo � giao di?n d? h?a (tham kh?o bu?i 1) | |
from Tkinter import * | |
window = Tk() | |
window.title("Demo ATBMTT") | |
lb0 = Label(window, text=" ", font=("Arial Bold", 10)) | |
lb0.grid(column=0, row=0) | |
lb1 = Label(window, text="Chuong trinh demo", font=("Arial Bold", 20)) | |
lb1.grid(column=1, row=1) | |
lb2 = Label(window, text="Mat ma Afine", font=("Arial Bold", 15)) | |
lb2.grid(column=0, row=2) | |
plainlb3 = Label(window, text="Plain text", font=("Arial Bold", 14)) | |
plainlb3.grid(column=0, row=3) | |
plaintxt = Entry(window, width=20) | |
plaintxt.grid(column=1, row=3) | |
KEYlb4 = Label(window, text="KEY PAIR",font=("Arial", 14)) | |
KEYlb4.grid(column=2, row=3) | |
KEYA1 = Entry(window,width=3) | |
KEYA1.grid(column=3, row=3) | |
KEYB1 = Entry(window,width=5) | |
KEYB1.grid(column=4, row=3) | |
lb5 = Label(window, text="CIPHER TEXT",font=("Arial", 14)) | |
lb5.grid(column=0, row=4) | |
ciphertxt3 = Entry(window,width=20) | |
ciphertxt3.grid(column=1, row=4) | |
denctxt3 = Entry(window,width=20) | |
denctxt3.grid(column=3, row=4) | |
def Char2Num(c): | |
return ord(c)-65 | |
def Num2Char(n): | |
return chr(n+65) | |
def xgcd(b, a): | |
tmp = a | |
x0, x1, y0, y1 = 1, 0, 0, 1 | |
while a != 0: | |
q, b, a = b//a, a, b%a | |
x0, x1 = x1, x0 - q*x1 | |
y0, y1 = y1, y0 - q*y1 | |
if x0 < 0: | |
x0 = tmp + x0 | |
return x0 | |
def encryptAF(txt,a,b,m): | |
r="" | |
for c in txt: | |
e = (a*Char2Num(c)+b )%m | |
r = r + Num2Char(e) | |
return r | |
def decryptAF(txt,a,b,m): | |
r = "" | |
a1 = xgcd(a,m) | |
for c in txt: | |
e = (a1*(Char2Num(c)-b ))%m | |
r = r + Num2Char(e) | |
return r | |
def clicked(): | |
a, b, m = int(KEYA1.get()),int(KEYB1.get()),26 | |
entxt = encryptAF(plaintxt.get(),a,b,m) | |
ciphertxt3.delete(0,END) | |
#a=int(KEYA1.get()) | |
ciphertxt3.insert(INSERT,entxt) | |
def giaima(): | |
a,b,m=int(KEYA1.get()),int(KEYB1.get()),26 | |
detxt=decryptAF(ciphertxt3.get(),a,b,m) | |
denctxt3.delete(0,END) | |
#a=int(KEYA1.get()) | |
denctxt3.insert(INSERT,detxt) | |
AFbtn = Button(window, text="M� H�a", command=clicked) | |
AFbtn.grid(column=5, row=3) | |
DEAFbtn = Button(window, text="Gi?i M� ", command=giaima) | |
DEAFbtn.grid(column=2, row=4) | |
# today | |
lb1 = Label(window, text="Chuong trinh demo mat ma DES", font=("Arial Bold", 20)) | |
lb1.grid(column=1, row=8) | |
cipher_mode_ecb = None | |
def ma_hoa_ecb(): | |
iv = Random.new().read(DES3.block_size) | |
cipher_mode_ecb = DES3.new(key, DES3.MODE_ECB , iv) | |
global cipher_mode_ecb | |
plaintext = mh_des_ecb_entry.get() | |
msg_ecb = iv + cipher_mode_ecb.encrypt(plaintext) | |
clipher_des_ecb_entry.delete(0,END) | |
clipher_des_ecb_entry.insert(INSERT,msg_ecb) | |
def giai_ma_ecb(): | |
plain_text = cipher_mode_ecb.decrypt(clipher_des_ecb_entry.get()) | |
decrypt_mh_des_ecb_entry.delete(0, END) | |
decrypt_mh_des_ecb_entry.insert(INSERT, plain_text[8:]) | |
# plain text | |
mh_des_ecb = Label(window, text="Ma hoa ECB", font=("Arial Bold", 14)) | |
mh_des_ecb.grid(column=0, row=9) | |
mh_des_ecb_entry = Entry(window, width=20) | |
mh_des_ecb_entry.grid(column=1, row=9) | |
mh_des_ecb_btn = Button(window, text="Ma hoa", command=ma_hoa_ecb) | |
mh_des_ecb_btn.grid(column=2, row=9) | |
# clipher text | |
clipher_des_ecb = Label(window, text="Clipher text", font=("Arial Bold", 14)) | |
clipher_des_ecb.grid(column=0, row=10) | |
clipher_des_ecb_entry = Entry(window, width=20) | |
clipher_des_ecb_entry.grid(column=1, row=10) | |
# gia ma | |
decrypt_mh_des_ecb = Label(window, text="Giai ma DES-ECB", font=("Arial Bold", 14)) | |
decrypt_mh_des_ecb.grid(column=0, row=11) | |
decrypt_mh_des_ecb_entry = Entry(window, width=20) | |
decrypt_mh_des_ecb_entry.grid(column=1, row=11) | |
decrypt_mh_des_ecb_btn = Button(window, text="Giai ma", command=giai_ma_ecb) | |
decrypt_mh_des_ecb_btn.grid(column=2, row=11) | |
# DES-CBC | |
cipher_mode_cbc = None | |
def ma_hoa_cbc(): | |
iv = Random.new().read(DES3.block_size) | |
cipher_mode_cbc = DES3.new(key, DES3.MODE_CBC , iv) | |
global cipher_mode_cbc | |
plaintext = mh_des_cbc_entry.get() | |
# print(plaintext) | |
msg_cbc = iv + cipher_mode_cbc.encrypt(plaintext) | |
clipher_des_cbc_entry.delete(0,END) | |
clipher_des_cbc_entry.insert(INSERT,msg_cbc) | |
def giai_ma_cbc(): | |
plain_text = cipher_mode_cbc.decrypt(clipher_des_cbc_entry.get()) | |
decrypt_mh_des_cbc_entry.delete(0, END) | |
decrypt_mh_des_cbc_entry.insert(INSERT, plain_text[8:]) | |
# plain text | |
mh_des_cbc = Label(window, text="Ma hoa cbc", font=("Arial Bold", 14)) | |
mh_des_cbc.grid(column=0, row=12) | |
mh_des_cbc_entry = Entry(window, width=20) | |
mh_des_cbc_entry.grid(column=1, row=12) | |
mh_des_cbc_btn = Button(window, text="Ma hoa", command=ma_hoa_cbc) | |
mh_des_cbc_btn.grid(column=2, row=12) | |
# clipher text | |
clipher_des_cbc = Label(window, text="Cipher text", font=("Arial Bold", 14)) | |
clipher_des_cbc.grid(column=0, row=13) | |
clipher_des_cbc_entry = Entry(window, width=20) | |
clipher_des_cbc_entry.grid(column=1, row=13) | |
# gia ma | |
decrypt_mh_des_cbc = Label(window, text="Giai ma DES-cbc", font=("Arial Bold", 14)) | |
decrypt_mh_des_cbc.grid(column=0, row=14) | |
decrypt_mh_des_cbc_entry = Entry(window, width=20) | |
decrypt_mh_des_cbc_entry.grid(column=1, row=14) | |
decrypt_mh_des_cbc_btn = Button(window, text="Giai ma", command=giai_ma_cbc) | |
decrypt_mh_des_cbc_btn.grid(column=2, row=14) | |
# AES | |
lb2 = Label(window, text="Chuong trinh demo mat ma AES-ECB", font=("Arial Bold", 20)) | |
lb2.grid(column=1, row=15) | |
cipher_mode_aes_ecb = None | |
def ma_hoa_aes_ecb(): | |
iv = Random.new().read(AES.block_size) | |
cipher_mode_aes_ecb = AES.new(key, AES.MODE_ECB, iv) | |
global cipher_mode_aes_ecb | |
plaintext = mh_des_aes_ecb_entry.get() | |
msg_aes_ecb = iv + cipher_mode_aes_ecb.encrypt(plaintext) | |
clipher_des_aes_ecb_entry.delete(0,END) | |
clipher_des_aes_ecb_entry.insert(INSERT,msg_aes_ecb) | |
def giai_ma_aes_ecb(): | |
plain_text = cipher_mode_aes_ecb.decrypt(clipher_des_aes_ecb_entry.get()) | |
decrypt_mh_des_aes_ecb_entry.delete(0, END) | |
decrypt_mh_des_aes_ecb_entry.insert(INSERT, plain_text[16:]) | |
# plain text | |
mh_des_aes_ecb = Label(window, text="Ma hoa aes_ecb", font=("Arial Bold", 14)) | |
mh_des_aes_ecb.grid(column=0, row=16) | |
mh_des_aes_ecb_entry = Entry(window, width=20) | |
mh_des_aes_ecb_entry.grid(column=1, row=16) | |
mh_des_aes_ecb_btn = Button(window, text="Ma hoa", command=ma_hoa_aes_ecb) | |
mh_des_aes_ecb_btn.grid(column=2, row=16) | |
# clipher text | |
clipher_des_aes_ecb = Label(window, text="Clipher text", font=("Arial Bold", 14)) | |
clipher_des_aes_ecb.grid(column=0, row=17) | |
clipher_des_aes_ecb_entry = Entry(window, width=20) | |
clipher_des_aes_ecb_entry.grid(column=1, row=17) | |
# gia ma | |
decrypt_mh_des_aes_ecb = Label(window, text="Giai ma AES - ECB", font=("Arial Bold", 14)) | |
decrypt_mh_des_aes_ecb.grid(column=0, row=18) | |
decrypt_mh_des_aes_ecb_entry = Entry(window, width=20) | |
decrypt_mh_des_aes_ecb_entry.grid(column=1, row=18) | |
decrypt_mh_des_aes_ecb_btn = Button(window, text="Giai ma", command=giai_ma_aes_ecb) | |
decrypt_mh_des_aes_ecb_btn.grid(column=2, row=18) | |
import ast | |
# RSA | |
# show public key | |
public_mh_rsa = Label(window, text="Private key", font=("Arial Bold", 14)) | |
public_mh_rsa.grid(column=0, row=23) | |
public_mh_rsa_entry = Entry(window, width=20) | |
public_mh_rsa_entry.grid(column=1, row=23) | |
# show private key | |
private_mh_rsa = Label(window, text="Public key", font=("Arial Bold", 14)) | |
private_mh_rsa.grid(column=0, row=24) | |
private_mh_rsa_entry = Entry(window, width=20) | |
private_mh_rsa_entry.grid(column=1, row=24) | |
class RSASelf: | |
def __init__(self): | |
self.key = RSA.generate(1024, Random.new().read) | |
self.publickey = self.key.publickey() | |
public_mh_rsa_entry.delete(0, END) | |
public_mh_rsa_entry.insert(INSERT, self.publickey.exportKey('PEM')) | |
private_mh_rsa_entry.delete(0, END) | |
private_mh_rsa_entry.insert(INSERT, self.key.exportKey('PEM')) | |
def encrypt(self): | |
plaintext = self.publickey.encrypt(mh_rsa_entry.get(), 32) | |
clipher_mh_rsa_entry.delete(0, END) | |
clipher_mh_rsa_entry.insert(INSERT, str(plaintext)) | |
return plaintext | |
def decrypt(self): | |
plain_text = self.key.decrypt(ast.literal_eval(str(clipher_mh_rsa_entry.get()))) | |
decrypt_mh_rsa_entry.delete(0, END) | |
decrypt_mh_rsa_entry.insert(INSERT, plain_text) | |
return plain_text | |
rsa = RSASelf() | |
# enc = rsa.encrypt('hello world RSA') | |
# print enc | |
# dec = rsa.decrypt(enc) | |
# print dec | |
# RSA | |
lb3 = Label(window, text="Chuong trinh demo mat ma RSA", font=("Arial Bold", 20)) | |
lb3.grid(column=1, row=19) | |
# plain text | |
mh_rsa = Label(window, text="Ma hoa RSA", font=("Arial Bold", 14)) | |
mh_rsa.grid(column=0, row=20) | |
mh_rsa_entry = Entry(window, width=20) | |
mh_rsa_entry.grid(column=1, row=20) | |
mh_rsa_btn = Button(window, text="Ma hoa", command=rsa.encrypt) | |
mh_rsa_btn.grid(column=2, row=20) | |
# clipher text | |
clipher_mh_rsa = Label(window, text="Clipher text", font=("Arial Bold", 14)) | |
clipher_mh_rsa.grid(column=0, row=21) | |
clipher_mh_rsa_entry = Entry(window, width=20) | |
clipher_mh_rsa_entry.grid(column=1, row=21) | |
# show public key | |
# giai ma | |
decrypt_mh_rsa = Label(window, text="Giai ma RSA", font=("Arial Bold", 14)) | |
decrypt_mh_rsa.grid(column=0, row=22) | |
decrypt_mh_rsa_entry = Entry(window, width=20) | |
decrypt_mh_rsa_entry.grid(column=1, row=22) | |
decrypt_mh_rsa_btn = Button(window, text="Giai ma", command=rsa.decrypt) | |
decrypt_mh_rsa_btn.grid(column=2, row=22) | |
window.geometry('800x600') | |
window.mainloop() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
import ast | |
import random | |
import Tkinter as tk | |
from Tkinter import * | |
import tkFont as tkfont | |
from Crypto import Random | |
from base64 import b64decode, b64encode | |
from Crypto.Hash import SHA256 | |
from Crypto.PublicKey import RSA | |
from Crypto.Cipher import AES | |
import tkMessageBox | |
from Crypto.Cipher import DES3 | |
class SHAAlgo: | |
def __init__(self, inp, out): | |
self.inp = inp | |
self.out = out | |
def encrypt(self): | |
text = self.inp.get() | |
digest = SHA256.new() | |
digest.update(text) | |
self.out.delete(0, END) | |
self.out.insert(INSERT, digest.hexdigest()) | |
class RSAAlgo: | |
def __init__(self, priinp, pubinp, inp, out, oup1): | |
self.inp = inp | |
self.out = out | |
self.oup1 = oup1 | |
self.priinp = priinp | |
self.pubinp = pubinp | |
self.key = RSA.generate(1024, Random.new().read) | |
self.publickey = self.key.publickey() | |
self.pubinp.delete(0, END) | |
self.pubinp.insert(INSERT, self.publickey.exportKey('PEM')) | |
self.priinp.delete(0, END) | |
self.priinp.insert(INSERT, self.key.exportKey('PEM')) | |
def encrypt(self): | |
plaintext = self.publickey.encrypt(self.inp.get(), 32) | |
self.out.delete(0, END) | |
self.out.insert(INSERT, b64encode(plaintext[0])) | |
return plaintext | |
def decrypt(self): | |
plain_text = self.key.decrypt(b64decode(self.out.get())) | |
self.oup1.delete(0, END) | |
self.oup1.insert(INSERT, plain_text) | |
return plain_text | |
class AESAlgo: | |
def __init__(self, inp, out, oup1): | |
self.inp = inp | |
self.out = out | |
self.oup1 = oup1 | |
self.iv = Random.new().read(AES.block_size) | |
self.secret = b'abcdefgh12345678' | |
self.key = AES.new(self.secret, AES.MODE_ECB, self.iv) | |
def encrypt(self): | |
plaintext = self.inp.get() | |
try: | |
ciphertext = self.iv + self.key.encrypt(plaintext) | |
self.out.delete(0, END) | |
self.out.insert(INSERT, ciphertext) | |
except ValueError: | |
tkMessageBox.showerror( | |
"Error", "Oops! Input strings must be a multiple of 16 in length") | |
def decrypt(self): | |
plaintext = self.key.decrypt(self.out.get()) | |
self.oup1.delete(0, END) | |
self.oup1.insert(INSERT, plaintext[16:]) | |
return plaintext | |
class DESAlgo: | |
def __init__(self, inp, out, oup1): | |
self.inp = inp | |
self.out = out | |
self.oup1 = oup1 | |
self.iv = Random.new().read(DES3.block_size) | |
self.secret = b'abcdefgh12345678' | |
self.key = DES3.new(self.secret, DES3.MODE_ECB, self.iv) | |
def encrypt(self): | |
plaintext = self.inp.get() | |
try: | |
ciphertext = self.iv + self.key.encrypt(plaintext) | |
self.out.delete(0, END) | |
self.out.insert(INSERT, ciphertext) | |
except ValueError: | |
tkMessageBox.showerror( | |
"Error", "Oops! Input strings must be a multiple of 8 in length") | |
def decrypt(self): | |
plaintext = self.key.decrypt(self.out.get()) | |
self.oup1.delete(0, END) | |
self.oup1.insert(INSERT, plaintext[8:]) | |
return plaintext | |
class ATBMTTApp(tk.Tk): | |
def __init__(self, *args, **kwargs): | |
tk.Tk.__init__(self, *args, **kwargs) | |
self.title_font = tkfont.Font( | |
family='Helvetica', size=18, weight="bold") | |
container = tk.Frame(self) | |
container.pack(side="top", fill="both", expand=True) | |
container.grid_rowconfigure(0, weight=1) | |
container.grid_columnconfigure(0, weight=1) | |
self.frames = {} | |
for F in (WelcomePage, DESApp, AESApp, RSAApp, SHAApp): | |
page_name = F.__name__ | |
frame = F(parent=container, controller=self) | |
self.frames[page_name] = frame | |
frame.grid(row=0, column=0, sticky="nsew") | |
self.show_frame("WelcomePage") | |
def show_frame(self, page_name): | |
frame = self.frames[page_name] | |
frame.tkraise() | |
class WelcomePage(tk.Frame): | |
def __init__(self, parent, controller): | |
tk.Frame.__init__(self, parent) | |
self.controller = controller | |
label = tk.Label(self, text="Ứng dụng demo ATBMTT", | |
font=controller.title_font) | |
label.grid(row=0, column=1, pady=10, padx=20) | |
cryptos = ['DESApp', 'AESApp', 'RSAApp', 'SHAApp'] | |
labels = ['DES', 'AES', 'RSA', 'SHA'] | |
for i in range(4): | |
ct = [random.randrange(256) for x in range(3)] | |
brightness = int(round(0.299*ct[0] + 0.587*ct[1] + 0.114*ct[2])) | |
ct_hex = "%02x%02x%02x" % tuple(ct) | |
bg_colour = '#' + "".join(ct_hex) | |
l = tk.Button(self, | |
text=labels[i], | |
fg='White' if brightness < 120 else 'Black', | |
bg=bg_colour, | |
font='Helvetica 12 normal', | |
width=20, | |
command=lambda i=i: controller.show_frame(cryptos[i])) | |
l.grid(row=i+1, column=1, pady=5) | |
footer = tk.Label(self, text="Thực hiện bởi Phạm Trường An (B1302707)", | |
font="Monospace 12 normal") | |
footer.grid(row=10, column=1, pady=10, padx=20) | |
class DESApp(tk.Frame): | |
def __init__(self, parent, controller): | |
tk.Frame.__init__(self, parent) | |
self.controller = controller | |
# back button | |
button = tk.Button(self, text="Trở về", | |
command=lambda: controller.show_frame("WelcomePage")) | |
button.grid(row=1, column=1, ipadx=10, ipady=7) | |
label = tk.Label(self, text="Mật mã DES", | |
font=controller.title_font).grid(row=1, column=2, pady=15, ipadx=10, ipady=7) | |
# input Plaintext | |
l1 = tk.Label(self, text="Plaintext", font="Monospace 12 normal").grid( | |
row=3, column=1, padx=10, pady=10, ipady=7) | |
e1 = tk.Entry(self, font="Monospace 12 normal") | |
e1.grid(row=3, column=2, ipadx=10, ipady=7) | |
# output cyphertext | |
l2 = tk.Label(self, text="Ciphertext", font="Monospace 12 normal").grid( | |
row=4, column=1, padx=10, pady=10, ipady=7) | |
e2 = tk.Entry(self, font="Monospace 12 normal") | |
e2.grid(row=4, column=2, ipadx=10, ipady=7) | |
# output plaintext | |
l2 = tk.Label(self, text="Plaintext", font="Monospace 12 normal").grid( | |
row=5, column=1, padx=10, pady=10, ipady=7) | |
e3 = tk.Entry(self, font="Monospace 12 normal") | |
e3.grid(row=5, column=2, ipadx=10, ipady=7) | |
# # init rsa | |
desx = DESAlgo(e1, e2, e3) | |
b1 = tk.Button(self, text="Encrypt", | |
font="Monospace 12 normal", | |
command=desx.encrypt) | |
b1.grid(row=3, column=3, padx=15, ipadx=10, ipady=3) | |
b2 = tk.Button(self, text="Decrypt", | |
font="Monospace 12 normal", | |
command=desx.decrypt) | |
b2.grid(row=4, column=3, padx=15, ipadx=10, ipady=3) | |
class AESApp(tk.Frame): | |
def __init__(self, parent, controller): | |
tk.Frame.__init__(self, parent) | |
self.controller = controller | |
# back button | |
button = tk.Button(self, text="Trở về", | |
command=lambda: controller.show_frame("WelcomePage")) | |
button.grid(row=1, column=1, ipadx=10, ipady=7) | |
label = tk.Label(self, text="Mật mã AES", | |
font=controller.title_font).grid(row=1, column=2, pady=15, ipadx=10, ipady=7) | |
# input Plaintext | |
l1 = tk.Label(self, text="Plaintext", font="Monospace 12 normal").grid( | |
row=3, column=1, padx=10, pady=10, ipady=7) | |
e1 = tk.Entry(self, font="Monospace 12 normal") | |
e1.grid(row=3, column=2, ipadx=10, ipady=7) | |
# output cyphertext | |
l2 = tk.Label(self, text="Ciphertext", font="Monospace 12 normal").grid( | |
row=4, column=1, padx=10, pady=10, ipady=7) | |
e2 = tk.Entry(self, font="Monospace 12 normal") | |
e2.grid(row=4, column=2, ipadx=10, ipady=7) | |
# output plaintext | |
l2 = tk.Label(self, text="Plaintext", font="Monospace 12 normal").grid( | |
row=5, column=1, padx=10, pady=10, ipady=7) | |
e3 = tk.Entry(self, font="Monospace 12 normal") | |
e3.grid(row=5, column=2, ipadx=10, ipady=7) | |
# # init rsa | |
aesx = AESAlgo(e1, e2, e3) | |
b1 = tk.Button(self, text="Encrypt", | |
font="Monospace 12 normal", | |
command=aesx.encrypt) | |
b1.grid(row=3, column=3, padx=15, ipadx=10, ipady=3) | |
b2 = tk.Button(self, text="Decrypt", | |
font="Monospace 12 normal", | |
command=aesx.decrypt) | |
b2.grid(row=4, column=3, padx=15, ipadx=10, ipady=3) | |
class RSAApp(tk.Frame): | |
def __init__(self, parent, controller): | |
tk.Frame.__init__(self, parent) | |
self.controller = controller | |
# back button | |
button = tk.Button(self, text="Trở về", | |
command=lambda: controller.show_frame("WelcomePage")) | |
button.grid(row=1, column=1, ipadx=10, ipady=7) | |
label = tk.Label(self, text="Mật mã RSA", | |
font=controller.title_font).grid(row=1, column=2, pady=15, ipadx=10, ipady=7) | |
# show private key | |
l3 = tk.Label(self, text="Private key", font="Monospace 12 normal").grid( | |
row=3, column=1, padx=10, pady=10, ipady=7) | |
e3 = tk.Entry(self, font="Monospace 12 normal") | |
e3.grid(row=3, column=2, ipadx=10, ipady=7) | |
# show public key | |
l4 = tk.Label(self, text="Public key", font="Monospace 12 normal").grid( | |
row=4, column=1, padx=10, pady=10, ipady=7) | |
e4 = tk.Entry(self, font="Monospace 12 normal") | |
e4.grid(row=4, column=2, ipadx=10, ipady=7) | |
# input Plaintext | |
l1 = tk.Label(self, text="Plaintext", font="Monospace 12 normal").grid( | |
row=5, column=1, padx=10, pady=10, ipady=7) | |
e1 = tk.Entry(self, font="Monospace 12 normal") | |
e1.grid(row=5, column=2, ipadx=10, ipady=7) | |
# output cyphertext | |
l2 = tk.Label(self, text="Ciphertext", font="Monospace 12 normal").grid( | |
row=6, column=1, padx=10, pady=10, ipady=7) | |
e2 = tk.Entry(self, font="Monospace 12 normal") | |
e2.grid(row=6, column=2, ipadx=10, ipady=7) | |
# output plaintext | |
l2 = tk.Label(self, text="Plaintext", font="Monospace 12 normal").grid( | |
row=7, column=1, padx=10, pady=10, ipady=7) | |
e5 = tk.Entry(self, font="Monospace 12 normal") | |
e5.grid(row=7, column=2, ipadx=10, ipady=7) | |
# # init rsa | |
rsax = RSAAlgo(e3, e4, e1, e2, e5) | |
b1 = tk.Button(self, text="Encrypt", | |
font="Monospace 12 normal", | |
command=rsax.encrypt) | |
b1.grid(row=5, column=3, padx=15, ipadx=10, ipady=3) | |
b2 = tk.Button(self, text="Decrypt", | |
font="Monospace 12 normal", | |
command=rsax.decrypt) | |
b2.grid(row=6, column=3, padx=15, ipadx=10, ipady=3) | |
class SHAApp(tk.Frame): | |
def __init__(self, parent, controller): | |
tk.Frame.__init__(self, parent) | |
self.controller = controller | |
# back button | |
button = tk.Button(self, text="Trở về", | |
command=lambda: controller.show_frame("WelcomePage")) | |
button.grid(row=1, column=1, ipadx=10, ipady=7) | |
label = tk.Label(self, text="Mật mã SHA", | |
font=controller.title_font).grid(row=1, column=2, pady=15, ipadx=10, ipady=7) | |
# input Plaintext | |
l1 = tk.Label(self, text="Plaintext", font="Monospace 12 normal").grid( | |
row=3, column=1, padx=10, pady=10, ipady=7) | |
e1 = tk.Entry(self, font="Monospace 12 normal") | |
e1.grid(row=3, column=2, ipadx=10, ipady=7) | |
# input cyphertext | |
l2 = tk.Label(self, text="Ciphertext", font="Monospace 12 normal").grid( | |
row=4, column=1, padx=10, pady=10, ipady=7) | |
e2 = tk.Entry(self, font="Monospace 12 normal") | |
e2.grid(row=4, column=2, ipadx=10, ipady=7) | |
# init sha | |
shax = SHAAlgo(e1, e2) | |
b1 = tk.Button(self, text="Hash it", | |
font="Monospace 12 normal", command=shax.encrypt) | |
b1.grid(row=3, column=3, padx=15, ipadx=10, ipady=3) | |
if __name__ == "__main__": | |
app = ATBMTTApp() | |
app.geometry("450x400") | |
app.mainloop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment