プロジェクトのgithubアドレス:bitcarmanlee easy-algorithm-interview-and-practiceには、
多くの場合、学生にプライベートメッセージを送信したり、関連する質問をするためのメッセージを残したりします。V番号bitcarmanlee。githubのスターのクラスメートは、私の能力と時間の範囲内で、あなたが関連する質問に答え、一緒に進歩するのを助けるために最善を尽くします。
1.Pythonのmd5
文字列md5の匿名化は、データ処理の一般的な方法です。md5アルゴリズムはpython3.Xにも実装されています。md5の使用法を見てみましょう。
import hashlib
def test():
s = "123"
m = hashlib.md5()
for i in range(5):
m.update(s.encode("utf8"))
result = m.hexdigest()
print(result)
上記のコードの出力は次のとおりです。
202cb962ac59075b964b07152d234b70
4297f44b13955235245b2497399d7a93
f5bb0c8de146c67b44babbf4e6584cc0
101193d7181cc88340ae5b2b17bba8a1
e277dd1e05688a22e377e25a3dae5de1
文字列123に対してmd55回実行します。理論的には、md5 5回の結果は同じであるはずですが、最終的な出力結果は異なります。
その理由はupdateメソッドにあります。
同じhashlibオブジェクトがupdateメソッドを呼び出すと、文字列aが最初に入力され、文字列bが2回入力されたとすると、2番目のmd5の結果は実際にはmd5になります。 a + bの結果。
簡単な例を見て、結論を確認してください。
def test():
s = "123123"
m = hashlib.md5()
m.update(s.encode("utf8"))
result = m.hexdigest()
print(result)
上記の出力は
4297f44b13955235245b2497399d7a93
これは、前のforループトラバーサルの2番目の出力結果、つまり「123123」のmd5の後に得られた結果と同じです。
2.hashlibモジュール
hashlibモジュールには、一般的に使用されるハッシュアルゴリズムが含まれています。ソースコードリストは次のとおりです。
# This tuple and __get_builtin_constructor() must be modified if a new
# always available algorithm is added.
__always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512',
'blake2b', 'blake2s',
'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512',
'shake_128', 'shake_256')
テストする一般的なものをいくつか選択しましょう
from hashlib import md5
from hashlib import sha256
from hashlib import sha512
hash_functions = [md5, sha256, sha512]
def get_hash_code(s):
result = []
for function in hash_functions:
hash_obj = function(s)
hash_hex = hash_obj.hexdigest()
result.append((hash_obj.name, hash_hex, len(hash_hex)))
return result
if __name__ == '__main__':
s = "123"
result = get_hash_code(s.encode("utf-8"))
for each in result:
print(each)
最終的な出力は次のとおりです。
('md5', '202cb962ac59075b964b07152d234b70', 32)
('sha256', 'a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3', 64)
('sha512', '3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2', 128)