Appel d'algorithme Python md5 et module hashlib

Adresse github du projet: bitcarmanlee easy-algorithm-interview-and-practice envoie
souvent des messages privés aux étudiants ou laissent des messages pour poser des questions connexes, numéro V bitcarmanlee. Les camarades de classe de star sur github, dans la limite de mes capacités et de mon temps, je ferai de mon mieux pour vous aider à répondre aux questions connexes et à progresser ensemble.

1. md5 en python

L'anonymisation d'une chaîne md5 est une méthode courante dans le traitement des données. L'algorithme md5 est également implémenté dans python3.X. Regardons l'utilisation de 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)

La sortie du code ci-dessus est:

202cb962ac59075b964b07152d234b70
4297f44b13955235245b2497399d7a93
f5bb0c8de146c67b44babbf4e6584cc0
101193d7181cc88340ae5b2b17bba8a1
e277dd1e05688a22e377e25a3dae5de1

Nous voulons faire md5 5 fois sur la chaîne 123. En théorie, le résultat de md5 5 fois devrait être le même, mais le résultat final est différent.

La raison réside dans la méthode de mise à jour:
lorsque le même objet hashlib appelle la méthode de mise à jour, en supposant que la chaîne a est entrée pour la première fois et que la chaîne b est entrée pour la deuxième fois, le résultat du deuxième md5 est en fait le md5 résultat de a + b.

Regardez un exemple simple pour confirmer notre conclusion:

def test():
    s = "123123"
    m = hashlib.md5()
    m.update(s.encode("utf8"))
    result = m.hexdigest()
    print(result)

La sortie ci-dessus est

4297f44b13955235245b2497399d7a93

C'est le même que le deuxième résultat de sortie de la traversée de boucle for précédente, c'est-à-dire le résultat obtenu après md5 de "123123".

2. module hashlib

Le module hashlib contient des algorithmes de hachage couramment utilisés. Les listes de codes sources sont les suivantes:

# 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')

Choisissons quelques exemples courants à tester

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)

Le résultat final est:

('md5', '202cb962ac59075b964b07152d234b70', 32)
('sha256', 'a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3', 64)
('sha512', '3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2', 128)

Je suppose que tu aimes

Origine blog.csdn.net/bitcarmanlee/article/details/113266784
conseillé
Classement