PHP sử dụng hàm băm nào?

Mặt tiền Hash của Laravel cung cấp hàm băm Bcrypt và Argon2 an toàn để lưu trữ mật khẩu người dùng. Nếu bạn đang sử dụng một trong các bộ khởi động ứng dụng Laravel, Bcrypt sẽ được sử dụng để đăng ký và xác thực theo mặc định

Bcrypt là một lựa chọn tuyệt vời để băm mật khẩu vì "hệ số công việc" của nó có thể điều chỉnh được, điều đó có nghĩa là thời gian cần để tạo hàm băm có thể tăng lên khi sức mạnh phần cứng tăng lên. Khi băm mật khẩu, chậm là tốt. Thuật toán băm mật khẩu càng mất nhiều thời gian thì người dùng độc hại càng mất nhiều thời gian để tạo "bảng cầu vồng" của tất cả các giá trị băm chuỗi có thể được sử dụng trong các cuộc tấn công vũ phu chống lại các ứng dụng

Cấu hình

Trình điều khiển băm mặc định cho ứng dụng của bạn được định cấu hình trong tệp cấu hình config/hashing.php của ứng dụng. Hiện tại có một số trình điều khiển được hỗ trợ. Bcrypt và Argon2 (các biến thể Argon2i và Argon2id)

Sử dụng cơ bản

Băm mật khẩu

Bạn có thể băm mật khẩu bằng cách gọi phương thức make trên mặt tiền Hash

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use Illuminate\Support\Facades\Hash;

class PasswordController extends Controller

* Update the password for the user.

* @param \Illuminate\Http\Request $request

* @return \Illuminate\Http\Response

public function update(Request $request)

// Validate the new password length...

'password' => Hash::make($request->newPassword)

Điều chỉnh hệ số công việc Bcrypt

Nếu bạn đang sử dụng thuật toán Bcrypt, phương pháp make cho phép bạn quản lý hệ số công việc của thuật toán bằng cách sử dụng tùy chọn

$hashed = Hash::make('password', [

0;

$hashed = Hash::make('password', [

Điều chỉnh hệ số làm việc Argon2

Nếu bạn đang sử dụng thuật toán Argon2, phương pháp make cho phép bạn quản lý hệ số công việc của thuật toán bằng cách sử dụng các tùy chọn

$hashed = Hash::make('password', [

2,

$hashed = Hash::make('password', [

3 và

$hashed = Hash::make('password', [

4;

$hashed = Hash::make('password', [

Ghi chú
Để biết thêm thông tin về các tùy chọn này, vui lòng tham khảo tài liệu PHP chính thức về hàm băm Argon

Xác minh rằng mật khẩu khớp với hàm băm

Phương thức

$hashed = Hash::make('password', [

5 được cung cấp bởi mặt tiền Hash cho phép bạn xác minh rằng một chuỗi văn bản thuần đã cho tương ứng với một hàm băm đã cho

________số 8_______

Xác định xem mật khẩu có cần được băm lại không

Phương pháp

$hashed = Hash::make('password', [

7 được cung cấp bởi mặt tiền Hash cho phép bạn xác định xem hệ số công việc mà trình băm sử dụng có thay đổi kể từ khi mật khẩu được băm hay không. Một số ứng dụng chọn thực hiện kiểm tra này trong quá trình xác thực của ứng dụng

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

  • password_hash() – được sử dụng để băm mật khẩu
  • password_verify() – được sử dụng để xác minh mật khẩu dựa trên hàm băm của nó
  • password_needs_rehash() – được sử dụng khi mật khẩu cần được băm lại
  • password_get_info() – 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 crypt() 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 ra 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 chức năng password_hash() 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 đã thấy 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 password_verify() lấy một mật khẩu đơn giản và chuỗi được 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()

password_get_info() 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

Phần 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 crypt(). 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

PHP sử dụng thuật toán băm nào?

PHP có tổng cộng 46 thuật toán băm đã đăng ký, trong đó “sha1”, “sha256”, “md5”, “haval160, 4” are the most popular ones. $string: This parameter expects the string to be hashed. $getRawOutput: This optional parameter expects a boolean value, on TRUE the function returns the hash in a raw binary format.

PHP có hỗ trợ sha256 không?

Hàm crypt() trong PHP cho phép bạn tạo hàm băm của chuỗi đã chỉ định bằng nhiều thuật toán băm khác nhau. Một số giá trị băm được hỗ trợ của hàm này bao gồm blowfish, SHA-256 và MD5 .

sha256 trong PHP là gì?

Định nghĩa và cách sử dụng . Giá trị trả về là một chuỗi có hexit (giá trị thập lục phân). The hash() function returns a hash value for the given data based on the algorithm like (md5, sha256). The return value is a string with hexits (hexadecimal values).

PHP password_hash có sử dụng muối không?

password_hash() sẽ tạo ra các loại muối khác nhau cho mỗi mật khẩu . Nó sẽ tăng sức mạnh bảo mật mật khẩu của bạn.