2011-01-27 20 views
13

Staram się w pełni zrozumieć, w jaki sposób szyfrowanie działa i jest kodowane, szczególnie w pythonie. Po prostu próbuję zrozumieć podstawy i stworzyć kod w najprostszej postaci.Podstawy szyfrowania Pythona w/hashlib sha1

Zamierzam przekazać identyfikator użytkownika między dwiema różnymi witrynami, ale oczywiście potrzebuję tego do zaszyfrowania kluczem prywatnym, aby witryna2 wiedziała, że ​​pochodzi z witryny internetowej1. Wydaje mi się, że jest to kod dla mnie: http://docs.python.org/library/hashlib.html#module-hashlib, ale nie ma bardzo dobrych przykładów (a może jestem w niewłaściwym miejscu).

Problem, który mam, to pełne zrozumienie sposobu kodowania i dekodowania.

Więc powiedzmy udostępniony klucz prywatny, który każda strona będzie wiedzieć:

shared_private_key = "ABCDEF" 

I chcę website1 przejść do website2 identyfikator użytkownika z:

userID = "123456" 

Jak website1 zaszyfrować mój identyfikator użytkownika z kluczem prywatnym w taki sposób, że szyfrowanie może być wysyłane za pośrednictwem nagłówków HTTP, a następnie odszyfrowywać Website2 i móc odczytać ID użytkownika przy użyciu udostępnionego klucza prywatnego?

Przepraszam, że zadałem takie podstawowe pytanie, ale nie rozumiem, jak to zrobić. Dzięki.

+2

'hashlib' nie jest szyfrowaniem. –

+4

Lub umieść język-agnostyk: hasing! = Encrypting. – delnan

Odpowiedz

14

Moduł hashlib zapewnia funkcje mieszania. Chociaż istnieje pewien związek z szyfrowaniem, po haszyszu niektórych danych nie można wrócić, aby uzyskać oryginalne dane z wyniku mieszania.

Zamiast enkrypcji danych można przyjąć inne podejście: tworzenie niepowtarzalnego podpisu za pomocą skrótu danych i jakiegoś sekretu.

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) 

Na koniec wysyłamy na Witrynę 2 dane wraz z podpisem. W ten sposób możesz być (w większości) pewny, że żadna nieuprawniona osoba nie zmieniła danych.

3

Biblioteka standardowa Pythona nie ma algorytmów szyfrowania. Wypróbuj pycrypto, ma kilka przykładów here.

+0

Moduł hashlib.py nie jest standardem? – kommradHomer

+7

Zapewnia tylko funkcje mieszania, a nie szyfrowanie. –

16

To, czego potrzebujesz, to biblioteka szyfrowania, która nie dostarcza algorytmów haszujących. Z Pythona hashlib Biblioteka:

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

Powroty: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

Given to hash, to niezwykle trudny niemożliwe (w ogóle), aby odzyskać oryginalną wiadomość. Potrzebna jest biblioteka szyfrowania, której biblioteka standardowa Python nie ma. Istnieje wiele questions related to python cryptography libraries na SO, które mogą być pomocne.