Pythonmd5アルゴリズム呼び出しとhashlibモジュール

プロジェクトの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)

おすすめ

転載: blog.csdn.net/bitcarmanlee/article/details/113266784