2011-01-27 19 views
13

Sto cercando di capire completamente come funziona la crittografia e viene codificata, in particolare con python. Sto solo cercando di ottenere le basi e creare codice nella forma più semplice.nozioni di base sulla crittografia python con hashlib sha1

Passerò un ID utente tra due siti diversi, ma ovviamente ho bisogno che questo sia crittografato con una chiave privata in modo che Website2 sappia che proviene da Website1. Questo sembra essere il codice per me: http://docs.python.org/library/hashlib.html#module-hashlib, ma non ha esempi molto buoni (o forse sono nel posto sbagliato).

Il problema che sto avendo è comprendere appieno come codificare e decodificare.

Allora supponiamo la chiave privata condivisa che ogni sito web saprà è:

shared_private_key = "ABCDEF" 

E voglio Website1 di passare al Website2 l'userID di:

userID = "123456" 

Come sarebbe Website1 cifrare il mio userID con la chiave privata in modo tale che la crittografia può essere inviata tramite le intestazioni HTTP e quindi decodificare Website2 ed essere in grado di leggere l'ID utente utilizzando la chiave privata condivisa?

Mi scuso per aver fatto una domanda così fondamentale, ma non riesco a capire come dovrebbe essere fatto. Grazie.

+2

'hashlib' non è crittografia. –

+4

Oppure, mettere un linguaggio indipendente: hasing! = Encrypting. – delnan

risposta

14

Il modulo hashlib fornisce funzioni di hashing. Mentre c'è qualche relazione con la crittografia, una volta che hai cancellato alcuni dati non puoi tornare indietro per ottenere i dati originali dal risultato dell'hash.

Invece di codificare i dati, è possibile adottare un approccio diverso: creare una firma univoca utilizzando un hash dei dati e alcuni segreti.

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) 

Infine, si invia al sito Web 2 i dati più la firma. In questo modo puoi essere (soprattutto) sicuro che nessuna persona non autorizzata ha manomesso i dati.

3

La libreria standard Python non ha algoritmi di crittografia. Prova pycrypto, ha alcuni esempi here.

+0

Il modulo hashlib.py non è standard? – kommradHomer

+7

Fornisce solo funzioni hash, non crittografia. –

16

Quello che vuoi è una libreria di crittografia e non una che fornisce solo algoritmi di hash. Con hashlib biblioteca di pitone:

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

Ritorni: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

Dato questo hash, è estremamente difficile impossibile (in generale) per ripristinare il messaggio originale. Quello che vuoi è una libreria di crittografia, che la libreria standard Python non ha. Ci sono un sacco di questions related to python cryptography libraries su SO che potrebbe essere utile.