2012-04-12 34 views
7

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?

+1

md5 bị tấn công, sử dụng bồn xoáy nước sha1 –

+1

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

+3

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! –

Trả lời

13

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.

0

MCrypt cung cấp nhiều phương thức bảo mật hơn (cũng như chính md5, btw).

+0

Có, nhưng bạn không thảo luận cái nào an toàn hơn và tại sao. – DampeS8N

-1

Tôi khuyên bạn nên đọc về hàm hash. Bạn cũng có thể đọc về số Mcrypt. Đây là điều băm tốt nhất hiện nay tôi đoán. Mcrypt cung cấp băm dựa trên chu kỳ CPU.

1

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); 
3

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.

+0

Sai. sha384 an toàn hơn: http://en.wikipedia.org/wiki/SHA_hash_functions –

+1

Bảo mật hơn 'SHA-256', có. Bảo mật hơn 'SHA-512', không. Bạn đã đọc nó ở đâu? –

8

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

+0

[SHA512 không phải là lựa chọn tồi, nhưng không phải là lựa chọn tốt nhất.] (Http://www.codinghorror.com/blog/2012/04/speed-hashing.html) – DampeS8N

+0

Tôi phải không đồng ý. – CodeTalk

+6

Chăm sóc để cung cấp bằng chứng cho lý do tại sao bạn không đồng ý? – DampeS8N