Основы шифрования python w/hashlib sha1
Я изо всех сил пытаюсь понять, как работает шифрование и кодируется, особенно с помощью python. Я просто пытаюсь убрать основы и создать код в простейшей форме.
Я собираюсь передать идентификатор пользователя между двумя разными сайтами, но, очевидно, мне нужно, чтобы это было зашифровано с помощью закрытого ключа, так что Website2 знает, что он появился на веб-сайте1. Мне кажется, это код для меня:
http://docs.python.org/library/hashlib.html#module-hashlib, но у него нет хороших примеров (или, может быть, я не в том месте).
Проблема, с которой я столкнулась, - это полное понимание того, как кодировать и декодировать.
Итак, скажем, общий закрытый ключ, который будет знать каждый веб-сайт:
shared_private_key = "ABCDEF"
И я хочу, чтобы сайт1 передал на сайт2 идентификатор пользователя:
userID = "123456"
Как бы Website1 зашифровал мой идентификатор пользователя с помощью закрытого ключа так, чтобы шифрование могло быть отправлено через HTTP-заголовки, а затем расшифровать Site2 и прочитать идентификатор пользователя с помощью общего закрытого ключа?
Извиняюсь за задание такого основного вопроса, но я не понимаю, как это должно быть сделано. Спасибо.
Ответы
Ответ 1
Модуль 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 данные плюс подпись. Таким образом, вы можете (в основном) убедиться, что ни один несанкционированный пользователь не вмешался в данные.
Ответ 2
То, что вы хотите, это библиотека шифрования, которая не предоставляет алгоритмы хеширования. С библиотекой python hashlib
:
import hashlib
m = hashlib.sha1()
m.update("The quick brown fox jumps over the lazy dog")
print(m.hexdigest())
Возвращает: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
Учитывая этот хеш, невозможно выполнить невозможно (в общем) восстановить исходное сообщение. Вам нужна библиотека шифрования, которой нет в стандартной библиотеке Python. Существует много вопросов, связанных с библиотеками криптографии python, которые могут быть полезны.
Ответ 3
Стандартная библиотека Python не имеет алгоритмов шифрования. Попробуйте pycrypto, здесь есть несколько примеров здесь.