Skip to content

Instantly share code, notes, and snippets.

@ancs21
Last active November 23, 2018 19:38
Show Gist options
  • Save ancs21/48f42494e425e64525afc5f536448a47 to your computer and use it in GitHub Desktop.
Save ancs21/48f42494e425e64525afc5f536448a47 to your computer and use it in GitHub Desktop.
AES-256 ECB and DES with PyCrypto
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)
# -*- 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()
#!/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()
# -*- 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()
# -*- 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()
#!/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