ADD file via upload

master
pcfkh8sw5 2 years ago
parent 6e875cfbb5
commit 5a218899df

305
gui.py

@ -0,0 +1,305 @@
import PySimpleGUI as sg
from padding_oracle_demo import po_main
import time # 引入time模块
import AES_CBC as CBC
import AES_CFB as CFB
import AES_CTR as CTR
import AES_ECB as ECB
import AES_OFB as OFB
import time
# 密钥设置请设置为16.24.32
ENCKEY = ''
user_get_enc = ''
# 定义窗口
def PO_attack():
layout = [
[sg.T('密文填塞攻击')],
[sg.T('正常用户:')],
[sg.Text('请输入需要加密的明文 :'), sg.InputText('', size=(32, 1), key='-user_mw-')],
[sg.Text('请输入使用的密钥 :'), sg.InputText('', size=(32, 1), key='-user_key-')],
[sg.Text('请输入使用的IV :'), sg.InputText('', size=(32, 1), key='-user_iv-')],
[sg.Button('开始加密', key='-user_start-')],
[sg.Text('加密密文:')],
[sg.Output(size=(80, 2), key='-user_enc-', echo_stdout_stderr=True)],
# [sg.Output(size=(100, 5))],
[sg.Text('')],
[sg.T('攻击者:')],
[sg.Text('请输入需要攻击的密文 :')],
[sg.Multiline('', size=(80, 2), key='-attacker_enc-')],
[sg.Text('请输入需要攻击的IV :'), sg.InputText('', size=(32, 1), key='-attacker_iv-')],
[sg.Text('请输入需要加密的明文 :'), sg.InputText('', size=(32, 1), key='-attacker_mw-')],
[sg.Button('开始攻击', key='-attacker_start-')],
[sg.Output(size=(80, 3), key='-attacker_output-', echo_stdout_stderr=True)],
[sg.Text('')]
]
return sg.Window('密文填塞攻击攻击', layout)
class GUI:
# 主窗口
def __init__(self):
sg.theme('DefaultNoMoreNagging')
list1 = ['ECB模式', 'CBC模式', 'CFB模式', 'OFB模式', 'CTR模式']
list2 = ['加密', '解密']
layout = [
[sg.Text('请选择加密/解密'), sg.Combo(list2, key='-crypt-', size=5, enable_events=True)],
[sg.Text('请输入密钥'), sg.InputText('', key='-key_text-')],
[sg.FileBrowse('选择文件', target='-FilePath-', file_types=(('ALL Files', '*.txt'),)),
sg.InputText('', size=(100, 1), key='-FilePath-')],
[sg.Button('开始执行加密/解密', size=(50, 2), key='-start-')],
[sg.Text('采用ECB模式'), sg.Text('', size=5, key='-ECBkey-', border_width=1, relief='ridge'), sg.Text('的结果是:'),
sg.InputText('', key='-ECB-'), sg.T('用时:'), sg.InputText('', key='ECBtime', )],
[sg.Text('采用CBC模式'), sg.Text('', size=5, border_width=1, relief='ridge', key='-CBCkey-'), sg.Text('的结果是:'),
sg.InputText('', key='-CBC-'), sg.T('用时:'), sg.InputText('', key='CBCtime')],
[sg.Text('采用CFB模式'), sg.Text('', size=5, border_width=1, relief='ridge', key='-CFBkey-'), sg.Text('的结果是:'),
sg.InputText('', key='-CFB-'), sg.T('用时:'), sg.InputText('', key='CFBtime')],
[sg.Text('采用OFB模式'), sg.Text('', size=5, border_width=1, relief='ridge', key='-OFBkey-'), sg.Text('的结果是:'),
sg.InputText('', key='-OFB-'), sg.T('用时:'), sg.InputText('', key='OFBtime')],
[sg.Text('采用CTR模式'), sg.Text('', size=5, border_width=1, relief='ridge', key='-CTRkey-'), sg.Text('的结果是:'),
sg.InputText('', key='-CTR-'), sg.T('用时:'), sg.InputText('', key='CTRtime')],
[sg.Button('Padding_Oracle_Attack', size=(50, 1), key='-PO_Attack-')]
]
self.window = sg.Window('AES', layout, size=(1200, 500), element_padding=(5, 10), font='宋体', grab_anywhere=True,
resizable=True, element_justification='left')
# 事件
def run(self):
while True:
event, values = self.window.read()
print(event)
if event == None:
break
elif event == '-crypt-':
print('加密模式')
self.window['-ECBkey-'].update(values['-crypt-'])
self.window['-CBCkey-'].update(values['-crypt-'])
self.window['-CFBkey-'].update(values['-crypt-'])
self.window['-OFBkey-'].update(values['-crypt-'])
self.window['-CTRkey-'].update(values['-crypt-'])
print('111')
elif event == '-start-':
print("开始执行")
with open(values['-FilePath-'], 'r', encoding='utf-8') as fp:
M = fp.read()
print(M)
# 加密
if values['-crypt-'] == '加密':
# CBC模式
cbc = CBC.aestest(values['-key_text-'])
T1_CBC = time.time()
for i in range(1000):
C_CBC = cbc.encrypt(M)
T2_CBC = time.time()
T_CBC = T2_CBC - T1_CBC # CBC加密时间
print(T_CBC)
# print(C_CBC)
self.window['-CBC-'].update(C_CBC)
self.window['CBCtime'].update(T_CBC)
# CFB模式
cfb = CFB.aestest(values['-key_text-'])
T1_CFB = time.time()
for i in range(1000):
C_CFB = cfb.encrypt(M)
T2_CFB = time.time()
T_CFB = T2_CFB - T1_CFB # CFB加密时间
print(T_CFB)
self.window['-CFB-'].update(C_CFB)
self.window['CFBtime'].update(T_CFB)
# CTR模式
ctr = CTR.aestest(values['-key_text-'])
T1_CTR = time.time()
for i in range(1000):
C_CTR = ctr.encrypt(M)
T2_CTR = time.time()
T_CTR = T2_CTR - T1_CTR # CTR加密时间
print(T_CTR)
self.window['-CTR-'].update(C_CTR)
self.window['CTRtime'].update(T_CTR)
# ECB模式
ecb = ECB.aestest(values['-key_text-'])
T1_ECB = time.time()
for i in range(1000):
C_ECB = ecb.encrypt(M)
T2_ECB = time.time()
T_ECB = T2_ECB - T1_ECB # ECB加密时间
print(T_ECB)
self.window['-ECB-'].update(C_ECB)
self.window['ECBtime'].update(T_ECB)
# OFB模式
ofb = OFB.aestest(values['-key_text-'])
T1_OFB = time.time()
for i in range(1000):
C_OFB = ofb.encrypt(M)
T2_OFB = time.time()
T_OFB = T2_OFB - T1_OFB # OFB加密时间
print(T_OFB)
self.window['-OFB-'].update(C_OFB)
self.window['OFBtime'].update(T_OFB)
elif values['-crypt-'] == '解密':
# CBC模式
cbc = CBC.aestest(values['-key_text-'])
T1_CBC = time.time()
for i in range(1000):
C_CBC = cbc.decrypt(M)
T2_CBC = time.time()
T_CBC = T2_CBC - T1_CBC # CBC解密时间
print(T_CBC)
self.window['-CBC-'].update(C_CBC)
self.window['CBCtime'].update(T_CBC)
# CFB模式
cfb = CFB.aestest(values['-key_text-'])
T1_CFB = time.time()
for i in range(1000):
C_CFB = cfb.decrypt(M)
T2_CFB = time.time()
T_CFB = T2_CFB - T1_CFB # CFB解密时间
print(T_CFB)
self.window['-CFB-'].update(C_CFB)
self.window['CFBtime'].update(T_CFB)
# CTR模式
ctr = CTR.aestest(values['-key_text-'])
T1_CTR = time.time()
for i in range(1000):
C_CTR = ctr.decrypt(M)
T2_CTR = time.time()
T_CTR = T2_CTR - T1_CTR # CTR解密时间
print(T_CTR)
self.window['-CTR-'].update(C_CTR)
self.window['CTRtime'].update(T_CTR)
# ECB模式
ecb = ECB.aestest(values['-key_text-'])
T1_ECB = time.time()
for i in range(1000):
C_ECB = ecb.decrypt(M)
T2_ECB = time.time()
T_ECB = T2_ECB - T1_ECB # ECB解密时间
print(T_ECB)
self.window['-ECB-'].update(C_ECB)
self.window['ECBtime'].update(T_ECB)
# OFB模式
ofb = OFB.aestest(values['-key_text-'])
T1_OFB = time.time()
for i in range(1000):
C_OFB = ofb.decrypt(M)
T2_OFB = time.time()
T_OFB = T2_OFB - T1_OFB # OFB解密时间
print(T_OFB)
self.window['-OFB-'].update(C_OFB)
self.window['OFBtime'].update(T_OFB)
elif event == '-key_text-':
print(values['-key_text-']) # 打印出密钥
elif event == '-PO_Attack-':
print('Padding模式')
win1 = PO_attack()
while True:
event1, value1 = win1.read()
if event1 == '-user_start-':
print(value1['-user_mw-'])
user_mw = value1['-user_mw-']
user_iv = value1['-user_iv-']
ENCKEY = value1['-user_key-'].encode('utf-8')
user_enc = po_main(user_mw, user_iv, ENCKEY)
print(user_enc)
user_get_enc = user_enc
# 给攻击者使用因为输出的是字符串包裹的bytes难以转换
win1['-user_enc-'].update(f'正常用户密文: {user_enc}')
win1['-attacker_output-'].update('')
if event1 == '-attacker_start-':
try:
attacker_enc = value1['-attacker_enc-']
print(attacker_enc)
print(type(attacker_enc), '\n')
except:
print('change failed!\n')
attacker_enc = user_get_enc
attacker_iv = value1['-attacker_iv-']
attacker_mw = value1['-attacker_mw-']
attacker_user_mw, attacker_enc_mw = po_main(None, attacker_iv, ENCKEY, attacker_enc,
attacker_mw)
print(attacker_user_mw, attacker_enc_mw)
win1['-attacker_output-'].update(f'正常用户明文: {attacker_user_mw}\n攻击者生成的密文: {attacker_enc_mw}')
elif event1 is None:
break
self.window.close()
if __name__ == '__main__':
BaseW = GUI()
BaseW.run()
Loading…
Cancel
Save