viernes, 9 de octubre de 2009

Cifrar contraseñas con Python

Python es un estupendo lenguaje con el que construir desde pequeños scripts a grandes aplicaciones en un abrir y cerrar de ojos. Yo hago mis pinitos con él.

Si alguna vez habéis realizado un programa en el que los usuarios han de logarse, es fundamental que el servidor guarde las contraseñas con un cifrado seguro. Y es interesante que si dos usuarios escogen la misma contraseña, el administrador de sistemas que gestione dicha información encriptada no sepa de este hecho, es decir, que no vea la misma cadena cifrada para dos usuarios.

La estrategia que seguiremos será la siguiente: la cadena de texto a cifrar no será sólo el password del usuario, sino la concatenación de su login y su password. Así, dos usuarios con la misma password no tendrán la misma cadena cifrada (pues el login se supone que es único). Usaremos el cifrado SHA-1 por ser un método (hasta ahora) seguro.

Este script en Python nos dará la clave cifrada que tendremos que guardar:

# -*- coding: latin-1 -*-

import hashlib, sys

if len(sys.argv) < 3:
    print "Uso: python encriptador.py USUARIO PASSWORD"
else:
    print "Password generado: " + hashlib.sha1( sys.argv[1] + sys.argv[2] ).hexdigest()

Para los no iniciados en Python, para ejecutarlo basta con:

$ python encriptador.py pepico delospalotes

Si deseáis usar el cifrado SHA-256, bastará con sustituir en el script anterior "sha1" por "sha256". La cadena resultado veréis que es más larga.