2014-05-02 16 views
14

Trong Flask,Flask - generate_password_hash không liên tục sản lượng

Khi tôi cố gắng chạy generate_password_hash("Same password") nhiều lần ouput là khác nhau mỗi lần?

Tôi đang làm gì sai. Tại sao nó không liên tục?

Tôi đoán nó có liên quan đến việc thiết lập muối?

+1

Hóa ra tôi đã cắt ngắn nó khi tôi đã lưu trữ nó trong databas của tôi e. Kết quả là, tôi không thể so sánh nó đúng :-) –

+1

Cảm ơn bạn đã đặt câu hỏi này - Tôi đã khởi động lại để thực hiện so sánh thay vì sử dụng phương thức check_password_hash(). Sẽ không biết phải làm gì khác ngoài câu trả lời cho câu hỏi. Upvote cho cả hai bạn. – JakeJ

Trả lời

29

Mật khẩu là muối, vâng. Muối được thêm vào mật khẩu trước khi băm, để đảm bảo rằng băm không thể sử dụng được trong một rainbow table attack.

Vì muối được tạo ngẫu nhiên mỗi lần bạn gọi hàm, băm mật khẩu kết quả cũng khác nhau. Hàm băm trả về bao gồm muối được tạo ra để vẫn có thể xác minh chính xác mật khẩu.

Demo:

>>> from werkzeug.security import generate_password_hash 
>>> generate_password_hash('foobar') 
'pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d' 
>>> generate_password_hash('foobar') 
'pbkdf2:sha1:1000$XHj5nlLU$bb9a81bc54e7d6e11d9ab212cd143e768ea6225d' 

Hai dây khác nhau; nhưng chứa đầy đủ thông tin để xác minh mật khẩu vì muối tạo ra được bao gồm trong mỗi:

# pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d 
    ^^^^^^^^^^^^^^^^ salt ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
     algo info ^^^^^^^^  actual hash of the password 
    (PBKDF2 applied SHA1 1000 times) 

Bởi vì muối ngẫu nhiên là tYqN0VeL cho một và XHj5nlLU, băm kết quả cũng khác nhau.

Mật khẩu foobar vẫn có thể được xác nhận chống lại hoặc băm:

>>> from werkzeug.security import check_password_hash 
>>> check_password_hash('pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d', 'foobar') 
True 
>>> check_password_hash('pbkdf2:sha1:1000$XHj5nlLU$bb9a81bc54e7d6e11d9ab212cd143e768ea6225d', 'foobar') 
True 

Xem thêm

Các vấn đề liên quan