2011-01-27 27 views
13

Tengo dificultades para comprender completamente cómo funciona el cifrado y está codificado, particularmente con python. Solo trato de descifrar lo básico y crear código en la forma más simple.conceptos básicos de encriptación python con hashlib sha1

Voy a pasar un ID de usuario entre dos sitios diferentes, pero obviamente necesito que se encripte con una clave privada para que Website2 sepa que proviene de Website1. Este parece ser el código para mí: http://docs.python.org/library/hashlib.html#module-hashlib, pero no tiene muy buenos ejemplos (o tal vez estoy en el lugar equivocado).

El problema que estoy teniendo es comprender completamente cómo codificar y decodificar.

lo que permite decir que la clave privada compartida que sabrá cada sitio web es:

shared_private_key = "ABCDEF" 

Y quiero WebSite1 para pasar a Website2 el ID de usuario de:

userID = "123456" 

Cómo sería WebSite1 cifrar mi ID de usuario con la clave privada de forma que el cifrado se pueda enviar a través de encabezados HTTP, y luego tener el sitio 2 descifrar y poder leer el ID de usuario utilizando la clave privada compartida?

Me disculpo por hacer una pregunta tan básica, pero no entiendo cómo se debe hacer esto. Gracias.

+2

'hashlib' no es cifrado. –

+4

O, ponga el lenguaje-agnóstico: ¡hasing! = Cifrado. – delnan

Respuesta

14

El módulo hashlib proporciona funciones de hash. Si bien hay cierta relación con el cifrado, una vez que hashe algunos datos, no puedes volver atrás para obtener los datos originales del resultado del hash.

En lugar de encriptar los datos puede adoptar un enfoque diferente: crear una firma única usando un hash de los datos y algún secreto.

shared_private_key = "ABCDEF" 

def create_signature(data): 
    return hashlib.sha1(repr(data) + "," + shared_private_key).hexdigest() 

def verify_signature(data, signature): 
    return signature == create_signature(data) 

Finalmente, usted envía al sitio web 2 los datos más la firma. De esa manera, usted puede estar (mayormente) seguro de que ninguna persona no autorizada manipuló los datos.

3

La biblioteca estándar de Python no tiene algoritmos de encriptación. Pruebe pycrypto, tiene algunos ejemplos here.

+0

¿El módulo hashlib.py no es estándar? – kommradHomer

+7

Solo proporciona funciones hash, no cifrado. –

16

Lo que desea es una biblioteca de cifrado, no una que solo proporcione algoritmos hash. Con hashlib la biblioteca de Python:

import hashlib 
m = hashlib.sha1() 
m.update("The quick brown fox jumps over the lazy dog") 
print(m.hexdigest()) 

devoluciones: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

Teniendo en cuenta este hash, es extremadamente difícil imposible (en general) para recuperar el mensaje original. Lo que quiere es una biblioteca de cifrado, que la biblioteca estándar de Python no tiene. Hay muchos questions related to python cryptography libraries en SO que pueden ser útiles.

Cuestiones relacionadas