Giải pháp thay thế tốt nhất cho thuật toán Md5 cho PHP để mã hóa dữ liệu người dùng như mật khẩu và dữ liệu bảo mật khác, được lưu trữ trong cơ sở dữ liệu MySQL là gì?Md5 thay thế bằng PHP?
Trả lời
SHA512 không phải là lựa chọn khủng khiếp. Nhưng nó sẽ không được lâu trước khi nó bị nứt cho hầu hết các độ dài của mật khẩu. Hãy Jeff's Advice. Sử dụng bcrypt hoặc PBKDF2. Chúng có khả năng chống EC2 hoặc các kỹ thuật xử lý song song khác. Có lẽ không phải là miễn dịch, nhưng kháng thuốc.
Lý do hàm băm tốt hơn không tốt hơn trong trường hợp này là ABC
trong MD5 trở thành một giá trị và ABC
trong SHA512 sẽ trở thành một giá trị. Tính toán tất cả 3 mật khẩu thư là actually easier for SHA512 than it was for MD5. Điều quan trọng là khó làm. Điều đó có nghĩa là một băm chậm, một trong đó sử dụng rất nhiều RAM, và/hoặc một mà không thể dễ dàng thực hiện trên EC2.
Lựa chọn tốt nhất là KHÔNG sử dụng mật khẩu một mình nữa. Quyết định xem đăng nhập có thực sự cần thiết cho trang web của bạn hay không và nếu có, hãy cố gắng sử dụng nhà cung cấp bên thứ 3 trước tiên. Nếu đó không phải là một tùy chọn, hãy xem xét mật khẩu + mã thông báo từ RSA. Chỉ sử dụng mật khẩu nếu bạn không có các tùy chọn khả thi khác.
Khi băm mật khẩu, khóa là băm (mật khẩu + muối) và muối cần phải là duy nhất cho mỗi người dùng và cũng khó đoán hoặc khó đoán. Sử dụng Tên người dùng đáp ứng các tiêu chí đầu tiên và tốt hơn không có muối hoặc muối tương tự cho mỗi người dùng, nhưng một muối ngẫu nhiên duy nhất cho mỗi người dùng là lựa chọn tốt hơn.Lý tưởng nhất là trong một cơ sở dữ liệu riêng biệt, nếu không phải là vị trí, với thông tin đăng nhập của riêng nó. Nó cũng nên được keyed không phải trên tên người dùng, nhưng trên user_id hoặc thậm chí một hash của user_id. Bạn muốn cơ sở dữ liệu đó là bằng chứng SQL injection. Việc chấp nhận không có đầu vào nào từ người dùng không được băm nhỏ là một cách hay để làm điều đó. Và bạn sẽ khôn ngoan để cho phép truy vấn thực hiện băm. Chậm? Vâng, và đó cũng là một điều tốt.
Bản thân muối phải chứa tất cả dữ liệu khó dự đoán mà nó có thể nhận được. Tên người dùng + Id người dùng + Dấu thời gian + rác từ dev/urandom + tweet mới nhất với từ taco trong đó. Còn càng tốt. SHA512 là một lựa chọn tốt của băm ở đây.
Tóm tắt: hash = bcrypt (mật khẩu + muối), salt = sha512 (tên người dùng + user_id + dấu thời gian + microtimestamp + dev/bit ngẫu nhiên + tiếng ồn khác).
Nếu bạn vẫn lo lắng sau tất cả điều đó. Vui lòng SHA512 mật khẩu bcrypted. Bạn sẽ đạt được sức mạnh của SHA512, mà khi nứt chỉ cho thấy một băm mã hóa bcrypted khó hơn rất nhiều.
Bạn có thể sử dụng hash như thế này, bạn có rất nhiều thuật toán để băm dữ liệu của mình.
hash('sha256', $data);
MD5 thực sự không được khuyến nghị nữa. Hầu hết các cài đặt php bao gồm phần mở rộng hash
. Lựa chọn tốt nhất cho hàm băm hiện tại là SHA-512. Bạn có thể sử dụng SHA-512 với các chức năng sau:
<?php
function sha512($string) {
return hash('sha512', $string);
}
?>
Có lựa chọn thay thế khác với kích thước đầu ra nhỏ hơn nếu bạn muốn, chẳng hạn như SHA-256
hoặc RIPEMD-160
.
Cập nhật: Đọc câu hỏi được cập nhật của bạn, tôi đề xuất hàm php crypt.
Sai. sha384 an toàn hơn: http://en.wikipedia.org/wiki/SHA_hash_functions –
Bảo mật hơn 'SHA-256', có. Bảo mật hơn 'SHA-512', không. Bạn đã đọc nó ở đâu? –
Thử băm php() chức năng http://php.net/manual/en/book.hash.php
Ví dụ mã:
$hash = hash('SHA512', $pass);
này biến này:
SHA512("The quick brown fox jumps over the lazy dog")
Into:
0x07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6
Đọc thêm: 012.351.http://en.wikipedia.org/wiki/SHA-2
- 1. Bảo vệ bằng mật khẩu PHP: md5 đến sha512
- 2. MySQL MD5 và Java MD5 không bằng
- 3. md5 với Android và PHP
- 4. Thay thế nội dung tệp bằng PHP
- 5. RoR - MD5 thế hệ
- 6. Lưu mật khẩu bằng Md5
- 7. Thay thế cho mô-đun md5 trong Python 3?
- 8. Sẽ md5 (file_contents_as_string) bằng md5_file (/ path/to/file) không?
- 9. Thay thế các từ có liên kết thẻ bằng PHP
- 10. PHP DOM thay thế phần tử bằng phần tử mới
- 11. PHP thay thế dấu cách bằng gạch chân
- 12. Thay thế chuỗi rỗng bằng null trong mảng php
- 13. PHP DOMDocument thay thế DOMElement con bằng chuỗi HTML
- 14. PHP: Cách thay thế hàng loạt $ _POST [...] bằng strip_tags ($ _ POST [...])
- 15. PHP Semaphore thay thế?
- 16. PHP get_called_class() thay thế
- 17. Thay thế cho PHP QuickForm?
- 18. nhiều thay thế bằng javascript
- 19. PHP date_parse_from_format() thay thế trong PHP 5.2
- 20. Thay thế session_unregister bằng unset()
- 21. C# Tạo thế hệ MD5 nhanh hơn
- 22. PHP thay thế cho trac?
- 23. PHP thay thế cho session_is_registered
- 24. thay thế php cho safe_mode
- 25. thay thế lớp trong php
- 26. Thay thế CSS bằng JavaScript
- 27. Spaces Thay thế bằng dấu gạch
- 28. Thay thế bằng Regex
- 29. Thay thế "bằng \"
- 30. Keytool tạo ra dấu vân tay SHA1 thay vì MD5?
md5 bị tấn công, sử dụng bồn xoáy nước sha1 –
hoạt động tốt. Bạn nên nói mặc dù những gì bạn đang làm với nó. – Brad
Phụ thuộc vào những gì bạn định sử dụng. Đối với công cụ băm để kiểm tra các bản sao, MD5 là tuyệt vời! –