2011-01-27 2 views
13

Я изо всех сил пытаюсь понять, как работает шифрование и кодируется, в частности, с помощью python. Я просто пытаюсь убрать основы и создать код в простейшей форме.основы шифрования python w/hashlib sha1

Я собираюсь передать идентификатор пользователя между двумя разными сайтами, но, очевидно, мне нужно, чтобы это было зашифровано с помощью закрытого ключа, так что Website2 знает, что он пришел с сайта 1. Мне кажется, это код для меня: http://docs.python.org/library/hashlib.html#module-hashlib, но у него нет хороших примеров (или, может быть, я не в том месте).

Проблема, с которой я столкнулась, - это полное понимание того, как кодировать и декодировать.

Так позволяет сказать, что общий секретный ключ, который каждый веб-сайт будет знать:

shared_private_key = "ABCDEF" 

И я хочу Website1 перейти к WEBSITE2 иденту из:

userID = "123456" 

Как WEBSITE1 зашифровать мой идентификатор_пользователь с закрытым ключом, способным передавать шифрование через HTTP-заголовки, а затем расшифровывать сайт2 и считывать идентификатор пользователя с помощью общего закрытого ключа?

Прошу прощения за задание такого основного вопроса, но я не понимаю, как это должно быть сделано. Благодарю.

+2

'hashlib' не шифруется. –

+4

Или, поместите язык-агностик: hasing! = Encrypting. – delnan

ответ

14

Модуль hashlib предоставляет функции хэширования. Хотя есть некоторое отношение к шифрованию, как только вы передадите некоторые данные, вы не сможете вернуться к исходным данным из результата хеширования.

Вместо того, чтобы вводить данные, вы можете использовать другой подход: создать уникальную подпись, используя хэш данных и некоторый секрет.

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) 

Наконец, вы отправляете на сайт 2 данные плюс подпись. Таким образом, вы можете (в основном) убедиться, что ни один несанкционированный пользователь не вмешался в данные.

3

Стандартная библиотека Python не имеет алгоритмов шифрования. Попробуйте pycrypto, у него есть примеры here.

+0

Модуль hashlib.py не является стандартным? – kommradHomer

+7

Он предоставляет только функции хэша, а не шифрование. –

16

Что вы хотите - это библиотека шифрования, которая не предоставляет алгоритмы хеширования. С hashlib библиотеки питона:

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

возвратов: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

Учитывая этот хэш, это чрезвычайно трудно невозможно (в целом), чтобы восстановить исходное сообщение. Вам нужна библиотека шифрования, которой нет в стандартной библиотеке Python. Есть много questions related to python cryptography libraries на SO, которые могут быть полезны.