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
- 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
Đâ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
2yargon2i
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?
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
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
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
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[]
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
5/5 - [12 phiếu]
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