2011-01-27 4 views
13

저는 파이썬과 함께 암호화가 작동하고 코딩되는 방식을 완전히 이해하기 위해 고심하고 있습니다. 나는 기본적인 것들을 얻고 가장 간단한 형태로 코드를 만들려고 노력하고있다.파이썬 암호화의 기본 사항 (hashlib sha1)

두 개의 서로 다른 사이트간에 userID를 전달할 예정이지만, 개인 키로 암호화해야하기 때문에 웹 사이트 2가 Website1에서 온 것으로 알고 있습니다. 이 코드는 나를위한 것 같습니다 : http://docs.python.org/library/hashlib.html#module-hashlib,하지만 아주 좋은 예제가 (또는 어쩌면 내가 잘못 자리에있어).

문제는 인코딩 및 디코딩 방법을 완전히 이해하고있는 것입니다.

그래서 말할 수 각 웹 사이트가 알 공유 비밀 키는 다음과 같습니다

shared_private_key = "ABCDEF" 

그리고 WEBSITE1가의 아이디 WEBSITE2을 전달하려면 어떻게 내 아이디를 암호화 WEBSITE1 것

userID = "123456" 

을 암호화가 HTTP 헤더를 통해 전송 될 수있는 개인 키를 사용하고 Website2를 해독하고 공유 개인 키를 사용하여 userID를 읽을 수있게하려면?

나는 그런 기본적인 질문을하는 것에 사과하지만 나는 어떻게해야 하는지를 이해하지 못하고있다. 감사.

+2

'hashlib'은 (는) 암호화되지 않습니다. –

+4

또는 language-agnostic : hasing! = encrypting을 입력하십시오. – delnan

답변

14

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에 데이터와 서명을 보냅니다. 그렇게하면 권한없는 사람이 데이터를 변조하지 않았 음을 (대부분) 확신 할 수 있습니다.

3

파이썬 표준 라이브러리에는 암호화 알고리즘이 없습니다. 시도해보십시오 pycrypto, 약간의 예가 here입니다.

+0

hashlib.py 모듈이 표준이 아닙니까? – kommradHomer

+7

해시 함수 만 제공하며 암호화는 제공하지 않습니다. –

16

암호화 라이브러리는 해시 알고리즘만을 제공하는 라이브러리가 아닙니다.

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

반환 : 파이썬의 hashlib 라이브러리를이 해시 감안할 때 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

, 그것은이다 매우 어려운 불가능 (일반적으로) 원본 메시지를 복구합니다. 원하는 것은 Python 표준 라이브러리에는없는 암호화 라이브러리입니다. 유용 할 수도있는 SO에는 많은 questions related to python cryptography libraries이 있습니다.