Hàm băm php hoạt động như thế nào?

Tiếp tục đọc để xem chức năng nào được khuyên dùng để bảo mật mật khẩu tốt hơn và cách sử dụng chức năng đó

nội dung

PHP password_hash là gì?

Hàm password_hash PHP là một hàm thực hiện thuật toán một chiều để băm mật khẩu. Nó chấp nhận mật khẩu, thuật toán băm và một mảng tùy chọn kết hợp tùy chọn—cú pháp. password_hash(mật khẩu, thuật toán, tùy chọn). Cuối cùng, nó trả về mật khẩu đã băm.

Xin lưu ý rằng hàm PHP password_hash tạo mật khẩu băm không thể đảo ngược. Thật thú vị, mật khẩu băm kết quả chứa thuật toán được sử dụng cũng như chi phí và muối. Vì vậy, bạn không cần phải nhớ và cung cấp riêng các chi tiết đã cho trong khi xác minh mật khẩu đã băm

– Mô tả cú pháp

Có nhiều hằng số thuật toán mà bạn có thể chuyển đến hàm đã cho. Ngoài ra, mỗi thuật toán đi kèm với một tập hợp các tùy chọn đã được thảo luận chi tiết bên dưới

Cách băm mật khẩu trong PHP

Bạn có thể sử dụng hàm PHP password_hash để băm mật khẩu trong PHP. Hơn nữa, bạn được phép chọn thuật toán bạn chọn trong khi băm mật khẩu PHP. Ngoài ra, đây là một số thuật ngữ quan trọng sẽ giúp bạn đạt được chức năng mong muốn

- Muối ăn

Muối có thể được mô tả như một phần nội dung được thêm vào mật khẩu thực trước khi băm nó. Nó phải có độ dài tối thiểu là 22 ký tự. Nội dung đã cho được thêm vào để tạo mật khẩu băm duy nhất, ngay cả đối với cùng một mật khẩu do người dùng gửi

- Phí tổn

Chi phí chỉ định số lần thuật toán chạy trước khi tạo mật khẩu băm cuối cùng. Nó ảnh hưởng đến tốc độ tính toán cùng với mật khẩu băm. Ngoài ra, cần lưu ý rằng chi phí có thể có giá trị tối đa là 31 và chi phí càng cao thì lợi ích bảo mật càng tốt. Tuy nhiên, không nên đặt giá trị chi phí cao hơn 10 trừ khi bạn đang làm việc trên các máy chủ khá hiệu quả

Ví dụ mã hóa

Chẳng hạn, bạn đã tạo một mật khẩu và bạn muốn băm cùng một mật khẩu bằng cách sử dụng các thuật toán khác nhau để thấy sự khác biệt trong kết quả đầu ra. Bạn sẽ cần thực thi hàm password_hash nhiều lần với các thuật toán khác nhau

Ví dụ mã hóa được chia sẻ bên dưới cho thấy cách băm mật khẩu trong PHP bằng cách sử dụng các hằng số thuật toán khác nhau


//tạo mật khẩu
$pass = “MyPass123@#”;
// tạo một mảng tùy chọn
tùy chọn $ = mảng (
“muối” => “AGHUKJNJ…………behjgcbwbn”,
“chi phí” => 13
);
// sử dụng PASSWORD_DEFAULT với một tập hợp các tùy chọn
echo password_hash($pass, PASSWORD_DEFAULT, $options) . “
”;

// đầu ra. $2y$13$AGHUKJNJ…………beiZP0PNHr4XYH63sEh9Unc2JU3fJpDEe
// sử dụng PASSWORD_BECRYPT
echo password_hash($pass,PASSWORD_BCRYPT) . “
”;

// đầu ra. $2y$10$pomI65Vl7wcYOBjP6bCHce9TVXZGT7DSjNQINuW8p9tSmuEty1cGG
// sử dụng PASSWORD_ARGON2I
echo password_hash($pass,PASSWORD_ARGON2I) . “
”;

// đầu ra. $argon2i$v=19$m=65536,t=4,p=1$NUl5bkFWM2pBZ0hJZ2RUUg$9a+JHfmT3P8OLYbdjUGiig4WrxOS05tMGWpI8DmM9M8
// sử dụng PASSWORD_ARGON2ID
tiếng vang password_hash($pass,PASSWORD_ARGON2ID);
// đầu ra. $argon2id$v=19$m=65536,t=4,p=1$RXdLSnNGOWVCdzRQYnJ0Lw$OaqMXerNkPtKfZBInz1gz3nVI6rrXTqL55e8JyCSNQU
?>

- Lưu ý quan trọng

Nếu bạn sử dụng hằng số thuật toán PASSWORD_BCRYPT thì độ dài của tham số mật khẩu người dùng sẽ bị cắt ngắn thành 72 ký tự.

PASSWORD_DEFAULT và PASSWORD_BCRYPT

Chắc chắn sẽ rất hữu ích nếu bạn nghiên cứu các thuật toán khác nhau để triển khai hàm PHP password_hash một cách hiệu quả. Đọc bên dưới để hiểu cách hoạt động của hằng số thuật toán mặc định

– MẬT KHẨU_DEFAULT

Hằng số thuật toán PASSWORD_DEFAULT sử dụng thuật toán bcrypt của . 5. 0. Tuy nhiên, hằng số đã cho sẽ không sử dụng cùng một thuật toán trong tương lai. Đó là bởi vì PASSWORD_DEFAULT tiếp tục cập nhật thuật toán của nó dựa trên các bổ sung thuật toán mới mạnh mẽ hơn của PHP. Do đó, bạn có thể mong đợi nó tạo ra các kết quả khác nhau cho cùng một mật khẩu trong những năm tới.

PASSWORD_DEFAULT cho phép bạn chỉ định các tùy chọn muối và chi phí trong khi sử dụng hằng số được đề cập. Trong trường hợp khác, một loại muối ngẫu nhiên và giá trị mặc định cho chi phí "10" được sử dụng

Ngoài ra, hằng số thuật toán đã nêu trả về một mật khẩu băm có tối thiểu 60 ký tự bắt đầu bằng “$2y$. ”. Tuy nhiên, bạn nên giữ độ dài của cột cơ sở dữ liệu liên quan ở mức 255 ký tự để đảm bảo an toàn

– MẬT KHẨU_BCRYPT

Hằng số thuật toán PASSWORD_BCRYPT triển khai thuật toán CRYPT_BLOWFISH . Hiện tại, bạn sẽ không tìm thấy bất kỳ sự khác biệt nào như vậy trong mật khẩu băm được trả về bởi hằng số thuật toán PASSWORD_DEFAULT và PASSWORD_BCRYPT.

Các hằng số thuật toán khác trong Mật khẩu băm PHP

Bây giờ, sau khi tìm hiểu về hằng số thuật toán mặc định được sử dụng bởi hàm password_hash PHP, đây là một số hằng số khác mà bạn có thể sử dụng

– MẬT KHẨU_ARGON2I

Hằng số thuật toán PASSWORD_ARGON2I đã được thêm vào PHP 7. 2. 0. Nó hoạt động bằng cách sử dụng thuật toán argon2i. Tuy nhiên, điều quan trọng là phải biên dịch PHP với sự hỗ trợ của Argon2 trước khi sử dụng thuật toán đã cho.

Ngoài ra, đây là danh sách các tùy chọn được hỗ trợ cho hằng số PASSWORD_ARGON2I

  • Memory_cost. Nó chỉ định dung lượng bộ nhớ tối đa mà thuật toán yêu cầu và có giá trị mặc định được đặt thành “PASSWORD_ARGON2_DEFAULT_MEMORY_COST”
  • thời gian_chi phí. Nó biểu thị lượng thời gian tối đa mà thuật toán sử dụng để hoàn thành công việc với giá trị mặc định “PASSWORD_ARGON2_DEFAULT_TIME_COST”
  • chủ đề. Tùy chọn đã nêu chỉ định số lượng luồng cần thiết để tạo hàm băm và có giá trị mặc định “PASSWORD_ARGON2_DEFAULT_THREADS

– MẬT KHẨU_ARGON2ID

Hằng số thuật toán PASSWORD_ARGON2ID đã được thêm vào PHP 7. 3. 0. Nó sử dụng thuật toán argon2id để tạo mật khẩu băm. Ngoài ra, tất cả các chi tiết được đề cập cho hằng số PASSWORD_ARGON2I cũng giữ nguyên cho hằng số đã cho.

Thay đổi trong các phiên bản khác nhau của PHP password_hash

Bạn đã bao giờ nhận thấy những thay đổi trong việc triển khai các chức năng trong các phiên bản PHP khác nhau chưa? . Thật thú vị, nhiều thay đổi đáng chú ý đã được thực hiện đối với hàm PHP password_hash. Vì vậy, vui lòng xem bên dưới để theo dõi các thay đổi một cách hiệu quả

– Phiên bản PHP 7. 4. 0

Trong PHP7. 4. 0, phần mở rộng natri đã thay thế cho mật khẩu Argon2. Ngoài ra, tham số hằng số của thuật toán giờ đây có thể chấp nhận một chuỗi. Tuy nhiên, bạn vẫn có thể chuyển các hằng số đã nêu ở trên thay vì các chuỗi

– Phiên bản PHP 8. 0. 0

Đáng ngạc nhiên, phiên bản PHP 8 đã mang đến một sự thay đổi đáng kinh ngạc trong hàm PHP password_hash bằng cách chuyển đổi kiểu dữ liệu của tham số thuật toán thành nullable. Do đó, việc chỉ định một thuật toán trong PHP 8 là không quan trọng. Ngoài ra, bây giờ hàm đã nêu không trả về false khi thực thi không thành công

Cùng với điều này, bạn nên nhớ rằng PHP 8 thích các muối được tạo tự động hơn các muối được cung cấp bởi các nhà phát triển. Do đó, nếu bạn cung cấp muối trong các tùy chọn, nó sẽ không được coi là

Nhận danh sách các thuật toán mật khẩu băm PHP có sẵn

Bạn có muốn xem các thuật toán khả dụng dựa trên phiên bản PHP hiện được cài đặt của mình không? . 4. 0. Hàm đã nêu không yêu cầu bất kỳ tham số nào. Tiếp theo, nó sẽ trả về một mảng ID thuật toán băm mật khẩu PHP có sẵn. password_algos() function can help you get the list in PHP versions greater than or equal to 7.4.0. The stated function doesn’t ask for any parameters. Next, it will return an array of available PHP password hashing algorithm IDs.

Nhìn vào đây cho cú pháp

password_algos()

– Nhận các ví dụ mã hóa thuật toán có sẵn

Dưới đây là các ví dụ mã hóa sẽ giúp bạn có được danh sách các thuật toán băm có sẵn

  • Nhận các thuật toán có sẵn trong PHP >= 7. 4. 0

Ví dụ: bạn đang sử dụng PHP >= 7. 4. 0 và bạn muốn xem các thuật toán băm có sẵn. Vì vậy, bạn sẽ thực thi hàm password_algos để lấy mảng thuật toán mong muốn và in nó dưới dạng danh sách

Vui lòng theo dõi biểu diễn mã này để có danh sách các thuật toán khả dụng trong PHP >= 7. 4. 0


// sử dụng hàm password_algos
$algorithms = password_algos();
// mở danh sách HTML
echo “
    ”;
    // lặp qua mảng các thuật toán có sẵn
    foreach($algorithms as $algo){
    // thêm thuật toán vào danh sách HTML
    echo “
  • $algo
  • ”;

    }
    // đóng danh sách HTML
    tiếng vang “
”;

?>

Đây là đầu ra của đoạn mã trên, có thể khác nhau trong các phiên bản khác nhau của PHP

2y
argon2i
argon2id
  • In các thuật toán có sẵn trong PHP < 7. 4. 0

Phiên bản PHP hiện tại của bạn có nhỏ hơn 7 không. 4. 0?


// kiểm tra phiên bản PHP được cài đặt trên PC của bạn
nếu (version_compare(PHP_VERSION, ‘7. 4. 0’, ‘<‘)) {
// tạo một hàm trả về danh sách các thuật toán có sẵn
chức năng có sẵn_algos()
{
$algorithms = array(“PASSWORD_BCRYPT”);
nếu (được xác định ('PASSWORD_ARGON2I'))
{
$algorithms[] = “PASSWORD_ARGON2I”;
}
if(đã xác định('PASSWORD_ARGON2ID')){
$algorithms[] = “PASSWORD_ARGON2ID”;
}
trả lại các thuật toán $;
}
}
// sử dụng hàm available_algos() và in kết quả của nó
print_r(sẵn_algos());
?>

Cách xác minh mật khẩu khi đăng nhập

Bạn có thể sử dụng chức năng tuyệt vời “password_verify()” để xác minh mật khẩu được băm trong vòng vài giây trong PHP >= 5. 5. 0. Hàm đã nói chấp nhận mật khẩu người dùng cùng với mật khẩu được băm, so sánh cả hai mật khẩu và cung cấp kết quả là đúng hoặc sai

Bạn sẽ thấy cú pháp này hữu ích. password_verify(password, hasshed_password) .

– Cách xác minh mật khẩu khi mã hóa đăng nhập Ví dụ

Giả sử gần đây bạn đã băm một mật khẩu và lưu nó vào một biến riêng lẻ. Bây giờ, bạn muốn xác minh cùng một mật khẩu người dùng. Tại đây, bạn sẽ sử dụng hàm password_verify để khớp mật khẩu người dùng với mật khẩu băm. Tiếp theo, bạn sẽ sử dụng các câu lệnh if-else để in các thông báo có liên quan tương ứng.

Vui lòng xem khối mã được chia sẻ bên dưới để xác minh mật khẩu người dùng


// băm mật khẩu “user456**”
$hashed_pass = password_hash(“user456**”,PASSWORD_DEFAULT);
// xác minh mật khẩu
if(password_verify(‘user456**’, $hashed_pass)){
echo 'Đăng nhập thành công. ’;
}
khác{
tiếng vang 'Xin lỗi. Mật khẩu không đúng. ’;
}
// đầu ra. Đăng nhập thành công
?>

Trích xuất chi tiết về mật khẩu băm

Có thể trích xuất các chi tiết về mật khẩu băm, chẳng hạn như thuật toán và chi phí, v.v. ? . Hàm đã cho có sẵn trong PHP >= 5. 5. 0. Vì vậy, tất cả những gì bạn cần làm là chuyển kết quả trả về bởi hàm PHP password_hash cho cùng một hàm

Sau đó, hàm password_get_info() sẽ trả về một mảng chứa id thuật toán, tên thuật toán và chi phí được sử dụng trong PHP .

Vui lòng xem cú pháp tại đây. password_get_info(password_hash) .

– Trích xuất chi tiết về ví dụ mã hóa băm

Chẳng hạn, bạn đã tạo một hàm do người dùng định nghĩa “generate_pass()” chấp nhận mật khẩu. Nó xác định thêm chi phí tùy chỉnh và tạo mật khẩu băm cho mật khẩu đã cho bằng cách sử dụng hàm PHP password_hash. Do đó, bạn không cần phải lặp đi lặp lại các bước giống nhau mỗi lần để băm mật khẩu PHP;

Nhưng bây giờ, bạn muốn xem chi tiết mật khẩu băm được tạo bởi hàm generate_pass(). Vì vậy, ở đây bạn sẽ sử dụng hàm password_get_info() bằng cách chuyển kết quả được trả về bởi hàm generate_pass() cho nó giống như biểu diễn mã được chia sẻ bên dưới


// xác định hàm do người dùng xác định để tạo mật khẩu băm
hàm tạo_hash($password){
$chi phí = mảng(
“chi phí” => 12
);
$hashed = password_hash($password,PASSWORD_DEFAULT,$cost);
trả lại $ đã băm;
}
// sử dụng hàm do người dùng định nghĩa
$hashed_pass = generate_hash(“newPass789**”);
// nhận và in chi tiết về hàm băm
print_r(password_get_info($hashed_pass));
// đầu ra. Mảng ( [algo] => 2y [algoName] => bcrypt [options] => Mảng ( [chi phí] => 12))
?>

Password_get_info không hoạt động

Bạn không thể chạy thành công chức năng password_get_info()? . Nếu bạn chuyển mật khẩu băm đã được tạo cho chức năng đã nói, bạn sẽ không nhận được kết quả khả quan. Do đó, đối số hợp lệ duy nhất mà bạn có thể chuyển đến hàm đã cho là kết quả được trả về bởi hàm password_hash PHP

– Ví dụ mã hóa Password_get_info không hoạt động

Vui lòng lập bản đồ lỗi của bạn với mã đại diện được cung cấp bên dưới để sửa lỗi sớm nhất


// Thực hiện chức năng không chính xác
$details = password_get_info(“$2y$13$AGHUKJNJ…………beiZP0PNHr4XYH63sEh9Unc2JU3fJpDEe”);
print_r($details);
?>

Mật khẩu mã hóa PHP bằng cách sử dụng hàm crypt()

Bạn đã bao giờ nghe nói về hàm crypt() được sử dụng trong quy trình băm mật khẩu PHP chưa? . Nó chấp nhận mật khẩu và muối tùy chọn làm đối số. Tiếp theo, nó trả về mật khẩu băm khi thực hiện thành công.

Tuy nhiên, hàm đã cho trả về một chuỗi có ít hơn 13 ký tự khác với muối được cung cấp khi thực thi không thành công

Vui lòng tham khảo cú pháp tại đây. crypt(mật khẩu, muối) .

– Thông tin thêm về chức năng crypt() để mã hóa mật khẩu PHP

Hàm crypt() sử dụng thuật toán dựa trên Unix DES tiêu chuẩn để tạo mật khẩu băm. Tuy nhiên, nó cũng hỗ trợ các thuật toán khác, như CRYPT_STD_DES, CRYPT_EXT_DES, CRYPT_MD5 và CRYPT_BLOWFISH, v.v. Hơn nữa, tốt nhất nên lưu ý rằng hàm crypt() tạo thông báo về việc sử dụng hàm mà không chuyển đối số salt mạnh cho nó. Ngoài ra, hàm đã cho tạo mật khẩu băm yếu mà không có muối

– Ví dụ mã hóa mật khẩu mã hóa PHP

Giả sử, bạn muốn tạo mật khẩu băm cho mật khẩu do người dùng của bạn nhập. Đây là cách bạn có thể mã hóa mật khẩu bằng cách sử dụng hàm crypt()


// sử dụng hàm crypt() để tạo mật khẩu băm
$pass1 = crypt(“passOne@@”,”gh”);
// in mật khẩu đã băm
tiếng vang $pass1;
// đầu ra. ghTumnh87Stgs
?>

Các câu hỏi thường gặp

1. PHP password_hash và crypt có liên quan đến nhau không?

Chà, cả hai chức năng đã cho đều có một số điểm tương đồng cũng như khác biệt. Hơn nữa, thật tuyệt khi lưu ý rằng hàm password_hash PHP là một trình bao bọc của hàm crypt()

2. Hàm nào được khuyên dùng để mã hóa mật khẩu trong PHP?

Hàm PHP password_hash được khuyến nghị sử dụng để băm mật khẩu qua hàm crypt(). Và những lý do hỗ trợ khuyến nghị này đã được liệt kê dưới đây

  • Hàm PHP password_hash tạo mật khẩu được băm mạnh hơn so với hàm crypt()
  • Băm mật khẩu tạo ra một loại muối mạnh theo mặc định, không giống như hàm crypt() yêu cầu các nhà phát triển chuyển một loại muối mạnh trước khi thực thi nó trong PHP 8
  • Hàm PHP password_hash cũng hoạt động tốt nhất với các mật khẩu được băm hiện có

Ngoài ra, ai muốn sử dụng một chức năng duy nhất với chức năng hạn chế nếu có sẵn một trình bao bọc đáng kinh ngạc của cùng một chức năng?

Suy nghĩ cuối cùng

Kết thúc cuộc thảo luận về chất lượng, bạn đã biết rằng hàm PHP password_hash giúp băm mật khẩu không thể đảo ngược. Ngoài ra, nhiều hàm khác hoạt động với đầu ra được trả về bởi hàm đã cho để tạo ra các kết quả khác nhau. Vì vậy, vui lòng xem bên dưới để có quyền truy cập vào danh sách các điểm cần thiết sẽ có lợi cho bạn trong quá trình băm mật khẩu PHP

  • Bạn có thể sử dụng hàm PHP password_hash để tạo mật khẩu băm bằng cách triển khai thuật toán băm một chiều
  • Hàm PHP password_hash chấp nhận mật khẩu, hằng số thuật toán băm và một mảng tùy chọn tùy chọn
  • Hàm PHP password_hash trả về mật khẩu được băm dưới dạng đầu ra
  • Sẽ rất tốt nếu thực thi hàm băm mật khẩu với giá trị và giá trị mặc định
  • Tốt hơn là sử dụng hàm password_hash thay vì hàm crypt

Hàm băm php hoạt động như thế nào?
Do đó, nếu bạn muốn bảo vệ mật khẩu người dùng khỏi tin tặc thì hàm PHP password_hash là lựa chọn tốt nhất

5/5 - (12 phiếu)

Hàm băm php hoạt động như thế nào?

Vị trí là tất cả

Vị trí là tất cả. Tài nguyên Go-To của bạn để Tìm hiểu & Xây dựng. CSS, JavaScript, HTML, PHP, C++ và MYSQL

Hash() hoạt động như thế nào?

Hàm băm là một hàm toán học hoặc thuật toán chỉ đơn giản là lấy một số lượng ký tự thay đổi (được gọi là ”thông báo”) và chuyển đổi nó thành một chuỗi có số lượng ký tự cố định . (called a hash value or simply, a hash).

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.

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

Để xác minh mật khẩu đã băm. PHP cung cấp một chức năng sẵn có có tên là password_verify để so khớp mật khẩu đã băm với mật khẩu ban đầu . Thông số. $mật khẩu. Mật khẩu mà chúng tôi đã băm bằng thuật toán băm. $hash. Mật khẩu băm mà chúng tôi sẽ xác minh bằng mật khẩu ban đầu.

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.