Saya memiliki kesalahan ini:
Traceback (most recent call last):
File "python_md5_cracker.py", line 27, in <module>
m.update(line)
TypeError: Unicode-objects must be encoded before hashing
ketika saya mencoba menjalankan kode ini dengan Python 3.2.2 :
import hashlib, sys
m = hashlib.md5()
hash = ""
hash_file = input("What is the file name in which the hash resides? ")
wordlist = input("What is your wordlist? (Enter the file name) ")
try:
hashdocument = open(hash_file, "r")
except IOError:
print("Invalid file.")
raw_input()
sys.exit()
else:
hash = hashdocument.readline()
hash = hash.replace("\n", "")
try:
wordlistfile = open(wordlist, "r")
except IOError:
print("Invalid file.")
raw_input()
sys.exit()
else:
pass
for line in wordlistfile:
# Flush the buffer (this caused a massive problem when placed
# at the beginning of the script, because the buffer kept getting
# overwritten, thus comparing incorrect hashes)
m = hashlib.md5()
line = line.replace("\n", "")
m.update(line)
word_hash = m.hexdigest()
if word_hash == hash:
print("Collision! The word corresponding to the given hash is", line)
input()
sys.exit()
print("The hash given does not correspond to any supplied word in the wordlist.")
input()
sys.exit()
python
python-3.x
unicode
syntax-error
hashlib
JohnnyFromBF
sumber
sumber
Jawaban:
Mungkin sedang mencari pengkodean karakter dari
wordlistfile
.Atau, jika Anda bekerja berdasarkan garis demi garis:
sumber
open(wordlist,"r",encoding='utf-8')
mengapa menggunakan terbuka dengan pengkodean spesifik, pengkodean ditentukan codec decode, tanpa opsi ini, itu menggunakan pengkodean tergantung platform.Anda harus mendefinisikan
encoding format
sepertiutf-8
, Coba dengan cara mudah ini,Contoh ini menghasilkan angka acak menggunakan algoritma SHA256:
sumber
Untuk menyimpan kata sandi (PY3):
sumber
Kesalahan sudah mengatakan apa yang harus Anda lakukan. MD5 beroperasi pada byte, jadi Anda harus menyandikan string Unicode ke
bytes
, misalnya denganline.encode('utf-8')
.sumber
Silakan lihat pertama di yang jawabannya.
Sekarang, pesan kesalahan jelas: Anda hanya dapat menggunakan byte, bukan Python string (apa yang digunakan untuk menjadi
unicode
Python <3), sehingga Anda harus menyandikan string dengan encoding pilihan Anda:utf-32
,utf-16
,utf-8
atau bahkan salah satu dibatasi 8- bit encodings (apa yang beberapa orang sebut codepages).Bytes dalam file wordlist Anda secara otomatis diterjemahkan ke Unicode oleh Python 3 saat Anda membaca dari file. Saya sarankan Anda melakukannya:
sehingga data yang dikodekan didorong ke algoritma md5 dikodekan persis seperti file yang mendasarinya.
sumber
sumber
Anda bisa membuka file dalam mode biner:
sumber
penyandian baris ini memperbaikinya untuk saya.
sumber
Jika itu adalah string baris tunggal. bungkus dengan b atau B. misalnya:
atau
sumber
Program ini adalah versi bebas bug dan disempurnakan dari cracker MD5 di atas yang membaca file yang berisi daftar kata sandi hash dan memeriksanya terhadap kata hash dari daftar kata kamus Bahasa Inggris. Semoga bermanfaat.
Saya mengunduh kamus bahasa Inggris dari tautan berikut https://github.com/dwyl/english-words
sumber