Băm mật khẩu PHP

Sử dụng bcrypt là phương pháp tốt nhất hiện được chấp nhận để băm mật khẩu, nhưng một số lượng lớn các nhà phát triển vẫn sử dụng các thuật toán cũ hơn và yếu hơn như MD5 và SHA1. Một số nhà phát triển thậm chí không sử dụng muối trong khi băm. API băm mới trong PHP 5. 5 nhằm mục đích thu hút sự chú ý đối với bcrypt trong khi che giấu sự phức tạp của nó. Trong bài viết này, tôi sẽ trình bày những kiến ​​thức cơ bản về cách sử dụng API băm mới của PHP

API băm mật khẩu mới hiển thị bốn chức năng đơn giản

  • 0 – được sử dụng để băm mật khẩu
  • 1 – được sử dụng để xác minh mật khẩu đối với hàm băm của nó
  • 2 – được sử dụng khi mật khẩu cần được băm lại
  • 3 – trả về tên của thuật toán băm và các tùy chọn khác nhau được sử dụng trong khi băm

password_hash()

Mặc dù hàm

4 là an toàn nhưng nhiều người cho rằng hàm này quá phức tạp và dễ gây lỗi cho người lập trình. Sau đó, một số nhà phát triển sử dụng muối yếu và thuật toán yếu để tạo hàm băm, chẳng hạn như

Nhưng hàm

0 có thể đơn giản hóa cuộc sống của chúng ta và mã của chúng ta có thể được bảo mật. Khi bạn cần băm mật khẩu, chỉ cần đưa nó vào hàm và nó sẽ trả về hàm băm mà bạn có thể lưu trữ trong cơ sở dữ liệu của mình

Đó là nó. Tham số đầu tiên là chuỗi mật khẩu cần được băm và tham số thứ hai chỉ định thuật toán sẽ được sử dụng để tạo hàm băm

Thuật toán mặc định hiện tại là bcrypt, nhưng một thuật toán mạnh hơn có thể được thêm vào làm mặc định sau này vào một thời điểm nào đó trong tương lai và có thể tạo ra một chuỗi lớn hơn. Nếu bạn đang sử dụng

1 trong các dự án của mình, hãy đảm bảo lưu trữ hàm băm trong một cột có dung lượng vượt quá 60 ký tự. Đặt kích thước cột thành 255 có thể là một lựa chọn tốt. Bạn cũng có thể sử dụng
2 làm tham số thứ hai. Trong trường hợp này, kết quả sẽ luôn dài 60 ký tự

Điều quan trọng ở đây là bạn không phải cung cấp giá trị muối hoặc thông số chi phí. API mới sẽ đảm nhận tất cả những điều đó cho bạn. Và muối là một phần của hàm băm, vì vậy bạn không cần phải lưu trữ riêng. Nếu bạn muốn cung cấp muối (hoặc chi phí) của riêng mình, bạn có thể làm như vậy bằng cách chuyển đối số thứ ba cho hàm, một mảng các tùy chọn

 custom_function_for_salt(), //write your own code to generate a suitable salt
    'cost' => 12 // the default cost is 10
];
$hash = password_hash($password, PASSWORD_DEFAULT, $options);

Bằng cách này, bạn luôn cập nhật các biện pháp bảo mật mới. Nếu sau này PHP quyết định triển khai thuật toán băm mạnh hơn, mã của bạn có thể tận dụng lợi thế của nó

password_verify()

Bây giờ bạn đã biết cách tạo hàm băm bằng API mới, hãy xem cách xác minh mật khẩu. Hãy nhớ rằng bạn lưu trữ các giá trị băm trong cơ sở dữ liệu, nhưng đó là mật khẩu đơn giản mà bạn nhận được khi người dùng đăng nhập.
Hàm

1 lấy một mật khẩu đơn giản và chuỗi băm làm hai đối số của nó. Nó trả về true nếu hàm băm khớp với mật khẩu đã chỉ định.

Chỉ cần nhớ rằng muối là một phần của mật khẩu băm, đó là lý do tại sao chúng tôi không chỉ định riêng nó ở đây

mật khẩu_cần_rehash()

Nếu bạn cần sửa đổi các tham số muối và chi phí cho chuỗi băm thì sao? . Hơn nữa, PHP có thể thay đổi cài đặt mặc định của thuật toán băm. Trong tất cả các trường hợp này, bạn sẽ muốn thử lại các mật khẩu hiện có

mật khẩu_cần_rehash()

giúp kiểm tra xem hàm băm được chỉ định có thực hiện một thuật toán cụ thể hay không và sử dụng các tùy chọn cụ thể như chi phí và muối khi được tạo

 12])) {
    // the password needs to be rehashed as it was not generated with
    // the current default algorithm or not created with the cost
    // parameter 12
    $hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);

    // don't forget to store the new hash!
}

Hãy nhớ rằng bạn sẽ cần làm điều này khi người dùng cố gắng đăng nhập vào trang web của bạn vì đây là lần duy nhất bạn có quyền truy cập vào mật khẩu đơn giản

password_get_info()

3 chấp nhận một hàm băm và trả về một mảng kết hợp gồm ba phần tử

  • 5 – một hằng số xác định một thuật toán cụ thể
  • 6 – tên của thuật toán được sử dụng
  • 7 – các tùy chọn khác nhau được sử dụng trong khi tạo hàm băm

Sự kết luận

API băm mật khẩu mới chắc chắn dễ sử dụng hơn là mò mẫm với hàm

4. Nếu trang web của bạn hiện đang chạy trên PHP 5. 5, thì tôi thực sự khuyên bạn nên sử dụng API băm mới. Những người đang sử dụng PHP 5. 3. 7 (hoặc mới hơn) có thể sử dụng thư viện có tên password_compat mô phỏng API và tự động tắt chính nó sau khi phiên bản PHP được nâng cấp lên 5. 5

Băm mật khẩu PHP là gì?

password_hash() tạo hàm băm mật khẩu mới bằng thuật toán băm một chiều mạnh . Các thuật toán sau hiện đang được hỗ trợ. PASSWORD_DEFAULT - Sử dụng thuật toán bcrypt (mặc định kể từ PHP 5. 5. 0). Lưu ý rằng hằng số này được thiết kế để thay đổi theo thời gian khi các thuật toán mới và mạnh hơn được thêm vào PHP.

Làm cách nào để tạo mật khẩu băm trong PHP?

PHP cung cấp hàm băm mật khẩu chung để tạo hàm băm mật khẩu mới từ mật khẩu . Ở đây, hàm password_hash chủ yếu nhận ba tham số đó là. $mật khẩu. Mật khẩu mà bạn muốn băm lấy một giá trị chuỗi. $algo. Thuật toán mà bạn muốn sử dụng để băm mật khẩu.

Làm cách nào để kiểm tra mật khẩu băm trong PHP?

Cú pháp. Hàm password_verify() có thể xác minh rằng hàm băm đã cho khớp với mật khẩu đã cho . Lưu ý rằng hàm password_hash() có thể trả về thuật toán, chi phí và muối như một phần của hàm băm được trả về. Do đó, tất cả thông tin cần xác minh hàm băm bao gồm trong đó.

Password_hash PHP có an toàn không?

Kết quả băm từ password_hash() an toàn vì. Nó sử dụng thuật toán băm mạnh. Nó thêm một loại muối ngẫu nhiên để ngăn chặn các cuộc tấn công từ điển và bảng cầu vồng.