2012-04-02 17 views
5

en Python que utilice el siguiente código para crear hash de las contraseñas de usuario:hash de tamaño de cadena

self.password = hmac.new(security_key, raw_password, sha1).hexdigest() 

Ahora me gustaría guardar este valor en la base de datos. ¿Qué tamaño debe ser mi columna de base de datos? Parece relacionado con la propiedad digest_size, pero no sabe qué objeto o clase tiene dicha propiedad. sha1 no tiene uno.

+0

SHA-1 no es la mejor opción para un hash de contraseñas. Es muy rápido, y se cree que es débil (si aún no está roto). Las mejores prácticas son algo así como [bcrypt] (http://code.google.com/p/py-bcrypt/), pero si quiere apegarse a la biblioteca estándar de Python, entonces 'sha256' es mejor que' sha1'. –

Respuesta

3

La salida de hmac depende del algoritmo hash que utiliza. En su caso, usa sha1, que siempre genera una cadena de bytes largos de 20 bytes según RFC2104. Llamar a hexdigest() convierte la cadena de bytes en un formato hexadecimal imprimible. 1 byte = 2 números hexadecimales, por lo que el total es de 40 caracteres hexadecimales. Puede establecer con seguridad la columna de su base de datos en char (40).

1

La salida de la función hash sha-1 tendrá 20 caracteres de longitud. (Según RFC2104, que hace referencia la hmac python module docs: "... L el byte de longitud de las salidas de hash (L = 16 para MD5, L = 20 para SHA-1).")

También puede verificar esto por:

import hashlib; 
H = hashlib.sha1("blahblah"); 
print(H.digest_size); 
Cuestiones relacionadas