2011-01-27 17 views
13

Tôi đang cố gắng hoàn toàn hiểu cách mã hóa hoạt động và được mã hóa, đặc biệt là với python. Tôi chỉ cố gắng để có được những điều cơ bản xuống và tạo mã theo hình thức đơn giản nhất.thông tin cơ bản về mã hóa python w/hashlib sha1

Tôi sẽ chuyển userID giữa hai trang web khác nhau, nhưng rõ ràng là tôi cần mã này để được mã hóa bằng khóa riêng nên Website2 biết nó đến từ Website1. Đây có vẻ là mã cho tôi: http://docs.python.org/library/hashlib.html#module-hashlib, nhưng nó không có ví dụ rất hay (hoặc có thể tôi đang ở sai vị trí).

Sự cố tôi gặp phải là hiểu rõ cách mã hóa và giải mã.

Vì vậy, cho phép nói rằng chìa khóa cá nhân chia sẻ mà mỗi trang web sẽ biết là:

shared_private_key = "ABCDEF" 

Và tôi muốn WEBSITE1 để vượt qua để WEBSITE2 các userID của:

userID = "123456" 

Làm thế nào sẽ WEBSITE1 mã hóa userID của tôi với khóa riêng tư trong một thời trang mà mã hóa có thể được gửi qua tiêu đề HTTP, và sau đó có giải mã Website2 và có thể đọc userID bằng cách sử dụng khóa riêng được chia sẻ?

Tôi xin lỗi vì đã hỏi một câu hỏi cơ bản như vậy, nhưng tôi không hiểu cách thực hiện điều này. Cảm ơn.

+2

'hashlib' không phải là mã hóa. –

+4

Hoặc, đặt ngôn ngữ bất khả tri: có! = Mã hóa. – delnan

Trả lời

14

Mô-đun hashlib cung cấp chức năng băm. Trong khi có một số liên quan đến mã hóa, một khi bạn băm một số dữ liệu bạn không thể quay lại để lấy dữ liệu gốc từ kết quả băm.

Thay vì ghi lại dữ liệu bạn có thể thực hiện một cách tiếp cận khác: tạo chữ ký duy nhất bằng cách sử dụng băm dữ liệu và một số bí mật.

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) 

Cuối cùng, bạn gửi đến trang web 2 dữ liệu cộng với chữ ký. Bằng cách đó bạn có thể được (chủ yếu) chắc chắn rằng không có người trái phép làm giả dữ liệu.

3

Thư viện chuẩn của Python không có thuật toán mã hóa. Hãy thử pycrypto, nó có một số ví dụ here.

+0

mô-đun hashlib.py không phải là tiêu chuẩn? – kommradHomer

+7

Nó chỉ cung cấp chức năng băm, không mã hóa. –

16

Điều bạn muốn là thư viện mã hóa không phải là thư viện chỉ cung cấp thuật toán băm. Với hashlib thư viện python của:

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

Returns: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

Với băm này, nó là vô cùng khó khăn không thể (nói chung) để khôi phục lại thông báo ban đầu. Những gì bạn muốn là một thư viện mã hóa, mà thư viện chuẩn Python không có. Có rất nhiều questions related to python cryptography libraries trên SO có thể hữu ích.