основы шифрования на python с хешлибом sha1 - PullRequest
14 голосов
/ 27 января 2011

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

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

У меня проблема с полным пониманием того, как кодировать и декодировать.

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

shared_private_key = "ABCDEF"

И я хочу, чтобы Website1 передавал на Website2 идентификатор пользователя:

userID = "123456"

Как Website1 зашифровывает мой userID с помощью закрытого ключа таким образом, что шифрование может быть отправлено через заголовки HTTP, а затем Website2 расшифрует и сможет считывать userID с помощью общего закрытого ключа?

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

Ответы [ 3 ]

16 голосов
/ 27 января 2011

Модуль 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 данные плюс подпись. Таким образом, вы можете быть (в основном) уверены, что посторонние лица не вмешались в данные.

16 голосов
/ 27 января 2011

То, что вы хотите - это библиотека шифрования, а не библиотека хеш-алгоритмов.С библиотекой hashlib Python:

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

Возвращает: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

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

3 голосов
/ 27 января 2011

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

...