2010-02-23 50 views
9

Tôi đang tạo mật khẩu băm bằng cách sử dụng muối sha1 trong PHP.Lưu trữ mật khẩu băm trong MySQL

Câu hỏi của tôi là: Trong MySQL mã hóa ký tự thích hợp, loại trường & chiều dài để lưu kết quả là gì?

Có điều gì khác trong MySQL để cân nhắc về bảo mật mật khẩu không? Cuối cùng là lựa chọn băm SHA256 hoặc SHA512 thực tế?

Trả lời

5

Đối với hàm băm SHA1, CHAR (40) sẽ là loại và độ dài trường tối ưu. Mã hóa ký tự không quan trọng lắm, tất cả các ký tự nằm trong phạm vi ASCII. Tôi muốn đi với cùng một ký tự được thiết lập như phần còn lại của cơ sở dữ liệu của bạn cho sự nhất quán.

12

Thuật toán SHA-2 (SHA-256, SHA-512) là các lựa chọn hợp lệ; tuy nhiên, chúng cần nhiều dung lượng hơn. Để lưu trữ các chữ số hex cho SHA-256, ví dụ, bạn cần một trường CHAR (64). Đã có một số câu hỏi về việc SHA-1 có bị "hỏng" Schneier discussed itNIST commented hay không. Nếu những người quan tâm đến bạn, sau đó nó có thể là tốt hơn để sử dụng một trong các chức năng SHA-2.

Và nếu bạn muốn tăng chi phí tấn công bạo lực, bạn cũng có thể xem xét thêm một số lần lặp lại bằng thuật toán như PBKDF2. Ai đó đã đăng một ví dụ here in the comments.

+0

"Để lưu trữ các chữ số hex cho SHA-256, ví dụ, bạn cần một trường CHAR (64)." Bạn có thể giải thích điều này? Cảm ơn. – JDelage

+2

@JDelage: Tôi chỉ đề cập đến số chữ số thập phân bắt buộc để lưu trữ. Đầu ra là 256 bit => 32 byte => 64 số thập phân. Nếu lưu trữ là một vấn đề, nó có thể được lưu trữ trong một số loại trường thô/nhị phân trong 32 byte. –

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