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)