python MD 5暗号化

2181 ワード

pythonのmd 5暗号化はpython 3の標準ライブラリでmd 5を除去したが、hash暗号化アルゴリズムについては、SHA 1、SHA 224、SHA 256、SHA 384、SHA 512、MD 5アルゴリズムなどのhashlibという標準ライブラリに置かれている.
以下は公式文書の紹介です.
https://docs.python.org/3/library/hashlib.html?highlight=hashlib#credits
md 5()メソッドはupdate(arg)を使用してargオブジェクトに伝達され、hashのオブジェクトを更新する.この方法はbyteタイプのみを受け入れます.そうしないと、エラーが発生します.これがパラメータの前にbを追加してタイプを変換する理由です.また、update(arg)メソッドを繰り返し呼び出すことは、上書きではなく、受信したargパラメータをつなぎ合わせることに注意してください.すなわち、m.update(a);m.update(b)はm.update(a+b)に等価である.hexdigest()は英語でhexが16進数を意味するため、hashのデータをデータに変換し、16進数のみを含む方法である.
>>> import hashlib
>>> m = hashlib.md5()
>>> m.update(b'123')
>>> m.hexdigest()
'202cb962ac59075b964b07152d234b70'

#またはそうすることもできます(最も一般的な書き方で、画像の名前によく使われます)
>>> hashlib.md5(b'123').hexdigest()
'202cb962ac59075b964b07152d234b70'

hashも使用できます.新()この一般的な方法、hashlib.new(name[,data]),nameはmd 5のようなハッシュ暗号化アルゴリズムの名前を伝達する
>>> hashlib.new('md5', b'123').hexdigest()
'202cb962ac59075b964b07152d234b70'

以上は英語に対してmd 5暗号化を行い、中国語を暗号化する場合、上記のように書くとエラーが発生することに気づきました.文字トランスコードの問題が原因で、以下のように書きます.
>>> import hashlib
>>> data = '  '
>>> hashlib.md5(data.encode(encoding='UTF-8')).hexdigest()
'7eca689f0d3389d9dea66ae112e5cfd7'

ここでまずデータをUTF-8形式に変換し、ネット上のツールを使用して暗号化した結果、あるmd 5暗号化ツールはUTF-8形式で暗号化されていないことが分かった.テストの結果、UTF-8、GBK、GB 2312、GB 18030に変更でき、大文字と小文字を区別しないことが分かった(GBK/GB 2312/GB 18030はいずれも漢字の符号化であるため、md 5暗号化後の結果は同じである).
例:
>>> hashlib.md5('  '.encode(encoding='UTF-8')).hexdigest()
'7eca689f0d3389d9dea66ae112e5cfd7'
 
>>> hashlib.md5('  '.encode(encoding='GBK')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'
 
>>> hashlib.md5('  '.encode(encoding='GB2312')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'
 
>>> hashlib.md5('  '.encode(encoding='GB18030')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'