основы шифрования python w/ hashlib sha1

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

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

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

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

shared_private_key = "ABCDEF"

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

userID = "123456"

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

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

3 ответов


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


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

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

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

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


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