Llamada al algoritmo Python md5 y módulo hashlib

Dirección del proyecto github: bitcarmanlee de fácil-algoritmo-entrevista-y-práctica a
menudo tiene a los estudiantes mensajes privados o dejan mensajes para hacer preguntas relacionadas, número V bitcarmanlee. Los compañeros de clase de star on github, dentro del alcance de mi capacidad y tiempo, haré todo lo posible para ayudarlos a responder preguntas relacionadas y progresar juntos.

1. md5 en python

Anonimizar una cadena md5 es un método común en el procesamiento de datos. El algoritmo md5 también se implementa en python3.X. Veamos el uso 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)

El resultado del código anterior es:

202cb962ac59075b964b07152d234b70
4297f44b13955235245b2497399d7a93
f5bb0c8de146c67b44babbf4e6584cc0
101193d7181cc88340ae5b2b17bba8a1
e277dd1e05688a22e377e25a3dae5de1

Queremos hacer md5 5 veces en la cadena 123. En teoría, el resultado de md5 5 veces debería ser el mismo, pero el resultado final de salida es diferente.

La razón radica en el método de actualización:
cuando el mismo objeto hashlib llama al método de actualización, asumiendo que la cadena a se ingresa por primera vez y la cadena b se ingresa por segunda vez, el resultado del segundo md5 es en realidad el md5 resultado de a + b.

Mire un ejemplo simple para confirmar nuestra conclusión:

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

La salida de arriba es

4297f44b13955235245b2497399d7a93

Es igual que el resultado de la segunda salida del recorrido anterior del bucle for, es decir, el resultado obtenido después de md5 de "123123".

Módulo 2.hashlib

El módulo hashlib contiene algoritmos hash de uso común. Las listas de código fuente son las siguientes:

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

Elijamos algunos comunes para probar.

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)

El resultado final es:

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

Supongo que te gusta

Origin blog.csdn.net/bitcarmanlee/article/details/113266784
Recomendado
Clasificación