[解決済み】TypeErrorの修正方法。Unicode-オブジェクトはハッシュ化する前にエンコードする必要があります。
2022-01-28 18:54:31
質問
このようなエラーが発生します。
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
でこのコードを実行しようとすると 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()
解決方法は?
の文字エンコーディングを検索しているのでしょう。
wordlistfile
.
wordlistfile = open(wordlist,"r",encoding='utf-8')
あるいは、一行単位で作業する場合。
line.encode('utf-8')
EDIT
下のコメントと この回答 .
上記の私の回答は、希望する出力が
str
から
wordlist
ファイルを作成します。での作業に慣れているのであれば
bytes
を使用したほうがよいでしょう。
open(wordlist, "rb")
. しかし、覚えておいてほしいのは、あなたの
hashfile
が必要です。
NOT
使用
rb
の出力と比較するのであれば
hexdigest
.
hashlib.md5(value).hashdigest()
を出力します。
str
であり、bytesオブジェクトと直接比較することはできない。
'abc' != b'abc'
. (この話題はもっとたくさんあるのですが、ATMの時間がないので).
また、この行にも注意が必要です。
line.replace("\n", "")
おそらく
line.strip()
これでbyteでもstrでもうまくいきます。しかし、もし単純に
bytes
という行に変更すればよい。
line.replace(b"\n", b"")
関連
-
Pythonコンテナのための組み込み汎用関数操作
-
任意波形を生成してtxtで保存するためのPython実装
-
Python LeNetネットワークの説明とpytorchでの実装
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み] オブジェクトの属性に基づいてオブジェクトのリストを並べ替えるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
python string splicing.join()とsplitting.split()の説明
-
Python 入出力と高次代入の基礎知識
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。