2011-12-28 26 views
5

Tôi đang làm việc trên tập lệnh và cần lưu mật khẩu. Vì mục đích phát triển, tôi đã sử dụng chức năng crypt() vì nó dễ dàng và khả dụng. Bây giờ tôi hầu như đã hoàn thành, tôi muốn thay thế nó bằng một thứ gì đó tốt hơn và nhất quán hơn.Cách thay thế cho crypt()

Một số những mối quan tâm tôi có là:

  • không phải tất cả các thuật toán được hỗ trợ trên tất cả các hệ thống
  • đôi khi muối được pre-pended đến kết quả (có vẻ như là một vấn đề an ninh)

Tôi muốn một cái gì đó hoạt động với PHP 4.3+.

Có bất kỳ thứ gì có sẵn hay tôi nên gắn bó với crypt()? Tôi đã nghĩ đến việc sử dụng md5(md5($password).$salt). Cảm ơn vì sự thấu hiểu.

+5

Bạn muốn một cái gì đó "tốt hơn' crypt() '" và bạn đang đề xuất md5 gấp đôi? – ceejayoz

+0

Tôi đã làm việc trên các dự án mà md5 và sha1 đã được sử dụng (không cùng nhau). Thông tin thêm về sha1: http://us.php.net/sha1 –

+0

mã hóa khó hiểu của bạn (2 chiều) với băm (1 chiều) –

Trả lời

6

Không có gì sai với crypt

là Nếu máy chủ của bạn không hỗ trợ nó, sử dụng máy chủ khác.

Bạn nên KHÔNG BAO GIỜ sử dụng MD5 cho băm mật khẩu (hoặc thậm chí SHA1 cho rằng vấn đề)

Sử dụng một trong hai bcrypt (phương pháp blowfish của crypt) hoặc pbkdf2

Có một thực hiện pbkdf2 ở đây: Encrypting Passwords with PHP for Storage Using the RSA PBKDF2 Standard

thông tin thêm về lý do tại sao và làm thế nào đây:

+0

Vấn đề là, tôi đang cố gắng thực hiện công việc này cho những người dùng khác, nơi tôi không có quyền kiểm soát hệ thống của họ và không phải tất cả các phương pháp mã hóa đều có sẵn, trong thực tế blowfish không phải của tôi, mặc dù nó có sha512, trong khi một máy chủ khác tôi chơi chỉ là ngược lại. – steveo225

+0

@ steveo225 nếu bạn muốn hy sinh bảo mật cho tính di động, tôi xin lỗi cho khách hàng của bạn. – Petah

+0

Có gì sai với md5? Tôi đã thấy nhiều hệ thống kịch bản đã biết khác sử dụng nó, như vBulletin? – steveo225

4

Trước hết: prepending muối không phải là một vấn đề an ninh. Có một muối cho mỗi mật khẩu là một món quà lớn, và nó hoàn toàn OK để nó được lưu trữ cùng với pw.

Bây giờ: Miễn là bạn không vận chuyển băm mật khẩu từ hệ thống này sang hệ thống khác, và sau này không hỗ trợ thuật toán mặc định của đầu tiên, sẽ không có gì xấu xảy ra theo định nghĩa. Kể từ PHP 5.3 có các thuật toán tích hợp trong PHP như Blowfish, được đảm bảo có sẵn.