おはよう、パスワードの復号化に失敗する
私は、ユーザー入力を読み込んでテキストファイルに保存されたキーと比較するスクリプトを作成しています。文字列が同じであっても失敗します。
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()
どうしたのですか?行#password=b'\xa3Y\x00\xae\xad\xad\x1c\xc6Js\xa9\xf4\x0e\xf3\x0f\xe3'
は比較する必要のあるキーですが、ファイルとの比較ではfalseを返しますが、内部では機能します。私を助けてください。 obj = AES.new(key, AES.MODE_CBC, IV)
を暗号化して移動し、機能の最後に削除することで、異なるキー出力を修正しました。しかし、私がファイルからの文字列と正しい入力のpythonを比較すると、まだ同じではないと言われます。以下は、私が意味するもののスクリーンショットです。
キーとIVは16文字でなければならず、エンコードされるテキストは16文字の倍数でなければなりません。空白のような文字で埋めなければなりません。 –
これは何ですか: 'messlen <16: diff = 16-messlen message = 'z' * diff + messagein' –
「E536D.dat」は改行を伴わずにこれらのバイトを含むバイナリファイルですか?その場合は、バイナリモードで開き、 '.read()'メソッドを使用してバイトデータを取得する必要があります。そうでない場合は、その内容を16進数で表示して、正しく読み込む方法を見つけ出す必要があります。 –