2012-04-02 40 views
5

Trong python Tôi sử dụng đoạn mã sau để tạo ra băm cho mật khẩu người dùng:băm chuỗi kích thước

self.password = hmac.new(security_key, raw_password, sha1).hexdigest() 

Bây giờ tôi muốn lưu giá trị này để cơ sở dữ liệu. Kích thước nào phải là cột cơ sở dữ liệu của tôi? Có vẻ như liên quan đến tài sản digest_size, nhưng không biết đối tượng hoặc lớp nào có thuộc tính như vậy. sha1 không có.

+0

SHA-1 không phải là lựa chọn tốt nhất cho băm mật khẩu. Nó rất nhanh, và nó được cho là yếu (nếu chưa bị hỏng). Thực hành tốt nhất là một cái gì đó như [bcrypt] (http://code.google.com/p/py-bcrypt/), nhưng nếu bạn muốn dính vào thư viện chuẩn Python, thì 'sha256' tốt hơn' sha1'. –

Trả lời

3

Đầu ra của hmac phụ thuộc vào thuật toán băm mà nó sử dụng. Trong trường hợp của bạn, nó sử dụng sha1, luôn luôn xuất ra một chuỗi dài 20 byte theo RFC2104. Gọi hexdigest() biến chuỗi byte thành định dạng hex có thể in được. 1 byte = 2 số hex, vì vậy tổng số là 40 ký tự hex. Bạn có thể đặt cột cơ sở dữ liệu của bạn thành char (40) một cách an toàn.

1

Đầu ra của hàm băm sha-1 sẽ dài 20 ký tự. (Theo RFC2104, tham chiếu bởi hmac python module docs: "... L byte độ dài của đầu ra băm (L = 16 cho MD5, L = 20 cho SHA-1).")

Bạn cũng có thể xác minh điều này bởi:

import hashlib; 
H = hashlib.sha1("blahblah"); 
print(H.digest_size); 
Các vấn đề liên quan