Guten Tag,Kennwort Decrypter Failing
Ich habe ein Skript Ich schaffe, dass eine Benutzereingabe liest und vergleicht ihn mit dem Schlüssel in einer Textdatei gespeichert. Es scheitert auch wenn die Saiten gleich sind bitte helft mir:
from Crypto.Cipher import AES
from tkinter import *
#create the window
root = Tk()
#modify root window
root.title("Button Example")
#root.geometry("500x500")
app = Frame(root)
key='Key is unique!!!'
IV='This is an IV456'
#password=b'\xa3Y\x00\xae\xad\xad\x1c\xc6Js\xa9\xf4\x0e\xf3\x0f\xe3'
def encrypt():
obj = AES.new(key, AES.MODE_CBC, IV)
messagein = inputbar.get()
inputbar.delete(0,END)
messlen = len(messagein)
if messlen < 16:
diff = 16-messlen
message = 'z'*diff + messagein
global ciphertext
ciphertext = obj.encrypt(message)
print(ciphertext)
del obj
def check():
encrypt()
passwordfunc()
if ciphertext == password:
print('Success!')
else:
print('Fail!')
def passwordfunc():
file=open("E536D.dat","r")
global password
password = file.readline()
file.close()
print(password)
inputbar = Entry(root,font='TkDefaultFont 30')
inputbar.pack()
button1= Button(text='Encrpyt',command=lambda:encrypt())
button1.pack()
button2 = Button(text='Compare',command=lambda:check())
button2.pack()
button3 = Button(text='File',command=lambda:passwordfunc())
button3.pack()
root.mainloop()
Was habe ich falsch gemacht? Die Zeile #password=b'\xa3Y\x00\xae\xad\xad\x1c\xc6Js\xa9\xf4\x0e\xf3\x0f\xe3'
ist der Schlüssel, mit dem verglichen werden muss, aber sie gibt false für den Vergleich aus der Datei zurück, aber in ihrem Inneren funktioniert sie. Bitte hilf mir. Ich reparierte die unterschiedliche Schlüsselausgabe, indem ich obj = AES.new(key, AES.MODE_CBC, IV)
in encrypt verschiebe und es am Ende der Funktion lösche. Aber wenn ich die Zeichenfolge aus der Datei und die richtige Eingabe Python vergleichen, sagt sie immer noch nicht das Gleiche. Unten ist ein Screenshot von dem, was ich meine.
der Schlüssel und die IV müssen 16 Zeichen haben, und der Text, der encripted sein muss ein Vielfaches von 16 Zeichen sein, müssen Sie es mit einigen Zeichen wie Leerzeichen auffüllen, wenn es nicht –
ist, tat ich, was das tut : 'if messlen <16: diff = 16-messlen message = 'z' * diff + messagein' –
Ist" E536D.dat "eine Binärdatei, die _just_ diese Bytes enthält, ohne Newline? In diesem Fall sollten Sie es im Binärmodus öffnen und die Methode '.read()' verwenden, um die Bytedaten abzurufen. Wenn dies nicht der Fall ist, sollten Sie uns einen hexadezimalen Speicherabzug ihres Inhalts zeigen, damit wir herausfinden können, wie sie richtig gelesen wird. –