Hàm hash() trả về giá trị băm cho dữ liệu đã cho dựa trên thuật toán như (md5, sha256). Giá trị trả về là một chuỗi có hexit (giá trị thập lục phân)
cú pháp
hash ( string $algo , string $data [, bool $raw_output = FALSE ] ) : stringThông số
Sr. STT Thông số và Mô tả 1thuật toán
Tên thuật toán băm. Có một danh sách lớn các thuật toán có sẵn với hàm băm, một số thuật toán quan trọng là md5, sha256, v.v.
Để có danh sách đầy đủ các thuật toán được hỗ trợ, hãy sử dụng hàm băm hash_algos()
dữ liệu
Dữ liệu bạn muốn băm được tạo. Xin lưu ý rằng một khi hàm băm được tạo, nó không thể bị đảo ngược
3raw_output
Theo mặc định, giá trị là sai và do đó, nó trả về các giá trị hexit chữ thường. Nếu giá trị là true, nó sẽ trả về dữ liệu nhị phân thô
Giá trị trả về
Hàm hash() trong PHP trả về một chuỗi có chữ thường hexits. Nếu raw_output được đặt thành true, nó sẽ trả về dữ liệu nhị phân thô
PHP có một trong những chức năng mã hóa tốt nhất được sử dụng để bảo mật dữ liệu. Chức năng mã hóa Hash_hmac() là một trong những bộ mã hóa nổi tiếng nhất
Chúng tôi sẽ chỉ cho bạn cách sử dụng hash_hmac với bộ mã hóa sha256 để tạo một '.$hash_it.' "; ?> 0, một khóa bí mật mà bạn có thể lưu trữ trong cơ sở dữ liệu hoặc sử dụng trong biểu mẫu đăng nhập của mình
Hàm '.$hash_it.' "; ?> 1 trong PHP
'.$hash_it.' "; ?> 1 tạo một giá trị băm bí mật có khóa bằng chữ và số. Nó sử dụng kỹ thuật xác thực mật mã được gọi là phương thức '.$hash_it.' "; ?> 3
cú pháp
hash_hmac($algo, $data, $key, $binary = false);
- '.$hash_it.' "; ?> 4 là một trong các tham số hash_hmac, được sử dụng làm giá trị băm có khóa bí mật chữ ký ( '.$hash_it.' "; ?> 5)
- '.$hash_it.' "; ?> 6, giá trị được băm (thường là mật khẩu của người dùng). Nó có thể là chữ và số
- '.$hash_it.' "; ?> 7 được tạo từ phương thức '.$hash_it.' "; ?> 3, một khóa bí mật mà bạn nhận được từ hàm và các cách sử dụng lập trình khác
- Tham số cuối cùng '.$hash_it.' "; ?> 9 là giá trị nhị phân
Nó trả về dữ liệu thô khi Your encrypted signature is: '.46e9757dc98f478c28f035cfa871dbd19b5a2bf8273225191bcca78801304813 0 và đưa ra các dấu thập lục phân chữ thường khi Your encrypted signature is: '.46e9757dc98f478c28f035cfa871dbd19b5a2bf8273225191bcca78801304813 1
Sử dụng '.$hash_it.' "; ?> 1 Với sha256 trong PHP
Thí dụ
'.$hash_it.' "; ?>
đầu ra
Your encrypted signature is: '.46e9757dc98f478c28f035cfa871dbd19b5a2bf8273225191bcca78801304813
Sử dụng '.$hash_it.' "; ?> 1 Với Your encrypted signature is: '.46e9757dc98f478c28f035cfa871dbd19b5a2bf8273225191bcca78801304813 5
Nếu bạn muốn chữ ký được mã hóa của mình an toàn hơn, bạn cũng có thể thực hiện đoạn mã sau
Thí dụ
$base64_encode.' "; } ?>
đầu ra
Your base64_decode(hash_hmac()); encrypted signature is is: '.00g0QmqlnluXxijqot60WZf6InDi07b/Mb5lL7eVZ34
Sử dụng '.$hash_it.' "; ?> 1 Với sha256 và áp dụng chuyển đổi Your encrypted signature is: '.46e9757dc98f478c28f035cfa871dbd19b5a2bf8273225191bcca78801304813 8/Your encrypted signature is: '.46e9757dc98f478c28f035cfa871dbd19b5a2bf8273225191bcca78801304813 9 trong PHP
- $base64_encode.' "; } ?> 0 - Hàm này giải mã một chuỗi nhị phân đã được mã hóa ở dạng thập lục phân
- $base64_encode.' "; } ?> 1 - Một chuỗi ký tự ASCII được chuyển đổi thành giá trị thập lục phân bằng phương pháp $base64_encode.' "; } ?> 1
Giả sử bạn có dữ liệu tài chính quan trọng muốn mã hóa và tạo khóa bí mật cho người dù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ố hàm băm được hỗ trợ của hàm này bao gồm blowfish, SHA-256 và MD5
Nếu bạn định sử dụng hàm này để mã hóa mật khẩu, chúng tôi khuyên bạn nên sử dụng hàm pi6 để thay thế. Hàm này là trình bao bọc cho hàm crypt() của PHP nhưng sử dụng mã hóa mạnh và muối mạnh theo mặc định
Trong một số phần sau, chúng tôi sẽ chỉ cho bạn cách sử dụng hàm crypt() để tạo từng giá trị băm được hỗ trợ cho một chuỗi đã chọn. Vì điều này được kiểm soát thông qua tham số “salt” nên đây không phải là chức năng đơn giản nhất để sử dụng
Cú pháp hàm crypt() của PHP
Chúng ta hãy bắt đầu bằng cách khám phá cú pháp của hàm crypt trong PHP. Cú pháp cho chúng ta thấy hàm này được viết như thế nào và sẽ cung cấp cho bạn ý tưởng cơ bản về cách sử dụng nó
Với cú pháp này, bạn có thể thấy rằng hàm crypt() có hai tham số và trả về một chuỗi sẽ là hàm băm của bạn
crypt(string $string, string $salt): string- pi7 – Tham số này là nơi bạn sẽ chỉ định chuỗi bạn muốn được băm bởi PHP
Tùy thuộc vào loại hàm băm, chuỗi này có thể bị cắt bớt trong quá trình tạo hàm băm, nghĩa là nó sẽ không xem xét toàn bộ chuỗi - pi8 – Bạn sẽ sử dụng muối để chỉ định phương pháp băm cũng như “muối” được áp dụng cho hàm băm
Muối là một cách thay đổi kết quả của hàm băm. Bạn sẽ chỉ có thể tạo cùng một hàm băm với cùng một loại muối. Điều này là để ngăn ai đó tạo ra rất nhiều hàm băm cho các mật khẩu có thể và nhận được kết quả phù hợp rất nhanh
Hàm crypt() sẽ trả về phiên bản đã băm của chuỗi đã truyền vào của bạn. Độ dài của chuỗi này phụ thuộc rất nhiều vào loại muối bạn chuyển vào hàm mật mã
Các phương thức Hash được hỗ trợ cho PHP
Như đã đề cập trước đó, hàm mã hóa trong PHP có hỗ trợ một số phương thức băm khác nhau. Phương pháp băm được chỉ định thông qua tham số muối bằng cách sử dụng một bộ ký tự cụ thể
Chúng tôi sẽ xem xét từng loại băm được hỗ trợ và cách chúng được chỉ định trong các phần sau. Bạn nên nghiên cứu cái nào phù hợp nhất với nhu cầu của bạn
CRYPT_STD_DES
Hàm băm đầu tiên chúng ta sẽ xem xét là hàm băm dựa trên DES tiêu chuẩn. Hàm băm này được chỉ định bằng cách sử dụng muối 2 ký tự
Các ký tự hợp lệ cho loại hàm băm này là “pi9“, “_Pi..SALT0” “_______32_______1” “_Pi..SALT2” và _Pi..SALT3“
Ví dụ: PHP sẽ xem xét giá trị sau đây là muối hợp lệ cho hàm băm “_Pi..SALT4”
piCRYPT_EXT_DES
Một phiên bản mở rộng của hàm băm dựa trên DES có một số lợi ích, bao gồm hỗ trợ muối lâu hơn
Muối cho phương pháp băm này phải dài chín ký tự và bắt đầu bằng ký tự gạch dưới (_Pi..SALT5)
Thuật toán sử dụng bốn ký tự đầu tiên sau dấu gạch dưới làm số lần lặp. Mỗi ký tự là 6 bit, với ký tự đầu tiên là ít quan trọng nhất
Bốn ký tự tiếp theo là muối được áp dụng cho hàm băm của bạn
Các giá trị này được mã hóa từ 0 đến 64 bằng cách sử dụng các ký tự “_______27_______9 _Pi..SALT0 _Pi..SALT1 _Pi..SALT2 $1$PIMYLIFE$0“. Khoảng thời gian (pi9) sẽ là 0, và chữ thường $1$PIMYLIFE$2 sẽ là “$1$PIMYLIFE$3“
Dưới đây là một ví dụ về cách đặt hàm băm “$1$PIMYLIFE$4” bằng cách sử dụng tham số muối của các hàm crypt() của PHP
_Pi..SALTCRYPT_MD5
Hàm băm khác được hỗ trợ bởi hàm crypt() của PHP là MD5. Mặc dù hiện được coi là một hàm băm tương đối yếu, nhưng nó vẫn được sử dụng ngoài phạm vi bảo mật
Bạn cũng có thể sử dụng hàm md5() trong PHP để đạt được điều tương tự như sử dụng loại hàm băm này
Để chỉ định hàm băm MD5 với hàm này, bạn cần bắt đầu muối của mình bằng “$1$PIMYLIFE$5” (số nhận dạng hàm băm) theo sau là tám ký tự (muối) và cuối cùng kết thúc chuỗi bằng một ký hiệu đô la khác ($1$PIMYLIFE$6)
Sau đây là ví dụ về cách đặt muối MD5 bằng hàm crypt() trong PHP
$1$PIMYLIFE$CRYPT_BLOWFISH
Hàm crypt() cũng hỗ trợ phiên bản bcrypt của mật mã blowfish được thiết kế như một giải pháp thay thế chắc chắn cho tiêu chuẩn DES cũ. Nếu bạn mã hóa dữ liệu như mật khẩu, đây là thuật toán mà bạn có thể sẽ muốn sử dụng trong PHP
Nhờ thiết kế của thuật toán, bạn có thể dần dần làm cho hàm băm mạnh hơn theo thời gian bằng cách tăng số lần lặp lại. Nó củng cố hàm băm vì cần nhiều sức mạnh xử lý hơn để tạo ra hàm băm làm chậm quá trình. Thật không may, một thuật toán nhanh không phù hợp để mã hóa
Để sử dụng tiêu chuẩn mã hóa blowfish trong PHP, bạn cần bắt đầu với “$1$PIMYLIFE$7“. Mặc dù bạn cũng có thể sử dụng “$1$PIMYLIFE$8” và “$1$PIMYLIFE$9“, nhưng cả hai sẽ sử dụng phương pháp băm yếu hơn
Sau mã định danh hàm băm, bạn cần chỉ định chi phí của hàm băm bằng tham số có hai chữ số. Chi phí này phải nằm trong khoảng từ “$2y$06$PiMyLifeUpExampleSalt10” đến “$2y$06$PiMyLifeUpExampleSalt11“. Con số càng cao, càng cần nhiều sức mạnh xử lý để tạo ra hàm băm
Cuối cùng, hàm băm được hoàn thành với hàm băm gồm 22 ký tự. Băm này chỉ được sử dụng các ký tự sau đây “_______27_______9“, “_Pi..SALT0“, “_Pi..SALT1“, “_Pi..SALT2“ và “$1$PIMYLIFE$0“
Sau đây là một ví dụ về muối hợp lệ cho tiêu chuẩn blowfish trên PHP với hàm crypt()
$2y$06$PiMyLifeUpExampleSalt1CRYPT_SHA256
Sử dụng hàm crypt() của PHP cũng cho phép bạn tạo hàm băm SHA-256 của chuỗi đã chỉ định
Để tạo hàm băm bằng PHP, bạn cần bắt đầu muối với “$2y$06$PiMyLifeUpExampleSalt17“. Điều này cho hàm crypt() biết rằng bạn muốn sử dụng hàm băm SHA-256
Tiếp theo, bạn có thể chỉ định số vòng băm sẽ được thực hiện. Các vòng này tương tự như tùy chọn chi phí của blowfish. Nếu muốn, bạn cần viết “$2y$06$PiMyLifeUpExampleSalt18” sau mã băm. $2y$06$PiMyLifeUpExampleSalt19 là số vòng thực hiện
Blowfish có tối thiểu $5$rounds=6000$PiMyLifeUpExampl$ $5$PiMyLifeUpExampl$0 vòng và tối đa là $5$rounds=6000$PiMyLifeUpExampl$ $5$PiMyLifeUpExampl$1. Bất kỳ giá trị nào nằm ngoài phạm vi này sẽ được làm tròn thành giá trị gần nhất
Nếu không có số nào được chỉ định, thì theo mặc định, PHP sẽ sử dụng ____66_______2 vòng
Cuối cùng, bạn cần chỉ định muối gồm mười sáu ký tự theo sau là ký hiệu đô la ($1$PIMYLIFE$6)
Dưới đây là hai ví dụ về việc sử dụng hàm băm SHA-256 với hàm crypt() của PHP. Trong ví dụ trên cùng, chúng tôi sử dụng tùy chọn vòng và trong ví dụ thứ hai, chúng tôi không
$5$rounds=6000$PiMyLifeUpExampl$ $5$PiMyLifeUpExampl$CRYPT_SHA512
Hàm băm SHA-512 là phiên bản dài hơn của hàm băm SHA-256. Vì về cơ bản nó là một phiên bản mở rộng của hàm băm, nên cách sử dụng của nó rất giống nhau
Sự khác biệt duy nhất là cách bạn nói với hàm crypt() của PHP rằng bạn muốn tạo hàm băm SHA-512
Để tạo hàm băm SHA-512, bạn sẽ cần bắt đầu muối với “$5$rounds=6000$PiMyLifeUpExampl$ $5$PiMyLifeUpExampl$4“
Sau mã định danh băm, sau đó bạn có thể chỉ định số vòng bạn muốn sử dụng để tạo hàm băm. Giống như SHA-256, điều này được viết bằng cách sử dụng “________ 55 ______ 8” trong đó “$2y$06$PiMyLifeUpExampleSalt19” là số vòng
Cuối cùng, bạn có thể viết muối gồm 16 ký tự theo sau là ký hiệu đô la ($1$PIMYLIFE$6)
Hai ví dụ về hàm băm SHA-256 hợp lệ là những gì chúng tôi đã viết bên dưới. Người ta sử dụng tham số round. Một người không
$6$rounds=6000$PiMyLifeUpExampl$ $6$PiMyLifeUpExampl$Sử dụng hàm crypt() trong PHP
Phần này sẽ chỉ cho bạn cách sử dụng hàm crypt() trong PHP. Bạn sẽ sử dụng các loại muối khác nhau mà chúng ta đã học trước đây và xem cách chúng hoạt động trong mã thực tế
Đối với ví dụ này, chúng tôi sẽ viết một tập lệnh PHP ngắn sẽ tạo một hàm băm bằng cách sử dụng từng hàm băm được hỗ trợ của hàm crypt()
1. Hãy để chúng tôi bắt đầu tập lệnh này bằng cách khai báo một biến có tên là “pi7“, mà chúng tôi sẽ gán chuỗi PHP $5$rounds=6000$PiMyLifeUpExampl$ $5$PiMyLifeUpExampl$9
Trong suốt phần còn lại của tập lệnh này, chúng tôi sẽ sử dụng một chuỗi này cho từng loại băm khác nhau của chúng tôi. Bằng cách này, bạn có thể thấy mỗi hàm băm khác nhau của PHP crypt() trông như thế nào và chúng được sử dụng như thế nào
$string = "PiMyLifeUp";2. Với ví dụ đầu tiên của chúng tôi, chúng tôi sẽ sử dụng hàm crypt() của PHP để tạo ra hàm băm DES tiêu chuẩn cho chuỗi của chúng tôi
Chúng tôi thực hiện việc này bằng cách trước tiên chuyển “pi7” vào tham số đầu tiên của hàm crypt(). Tiếp theo, chúng tôi chuyển vào một hai ký tự đơn giản cho muối. Trong ví dụ của chúng tôi, đây sẽ là “$6$rounds=6000$PiMyLifeUpExampl$ $6$PiMyLifeUpExampl$1“
Cuối cùng, chúng ta sử dụng từ khóa echo của PHP để xuất văn bản “Standard DES” theo sau là hàm băm mà chúng ta vừa tạo
$standard_des = crypt($string, "pi"); echo "Standard DES: " . $standard_des . PHP_EOL;3. Đối với ví dụ tiếp theo của chúng tôi, chúng tôi sẽ tạo một hàm băm DES mở rộng của biến “pi7” của chúng tôi
Lần này khi chúng tôi chỉ định loại muối, chúng tôi sẽ sử dụng “$6$rounds=6000$PiMyLifeUpExampl$ $6$PiMyLifeUpExampl$3“. Muối này sử dụng định dạng mà hàm crypt() mong đợi
Kết quả được xuất ra bằng cách sử dụng từ khóa echo và sẽ được xác định bằng nhãn “$6$rounds=6000$PiMyLifeUpExampl$ $6$PiMyLifeUpExampl$4”
$extended_des = crypt($string, "_Pi..SALT"); echo "Extended DES: " . $extended_des . PHP_EOL;4. Bây giờ chúng tôi sẽ chỉ cho bạn cách bạn có thể sử dụng hàm crypt() trong PHP để tạo hàm băm MD5 của một chuỗi
Trước tiên, chúng tôi chuyển biến “pi7” của mình cho hàm crypt. Tiếp theo, chúng tôi chuyển qua trong muối. Chúng tôi bắt đầu muối này với “$1$PIMYLIFE$5” để yêu cầu PHP tạo hàm băm MD5. Sau mã định danh băm, sau đó chúng tôi chỉ định muối tám ký tự
Giống như ví dụ trước, chúng tôi in ra hàm băm MD5 đã tạo bằng cách sử dụng tiếng vang
pi05. Tạo một mật mã blowfish dễ dàng như các hàm băm khác. Bạn chỉ cần chuyển vào muối được định dạng chính xác
Để giới thiệu điều này, chúng tôi sử dụng muối “______75_______7“. Bằng cách bắt đầu muối này với “$1$PIMYLIFE$7“, PHP có thể biết rằng chúng tôi muốn tạo hàm băm blowfish. Sau đó, chúng tôi xác định rằng chúng tôi muốn chạy các lần lặp lại “_______75_______9” của hàm băm
Cuối cùng, để hoàn thành muối của chúng tôi, chúng tôi bao gồm một muối 22 ký tự
pi16. Tiếp theo, chúng tôi sẽ giới thiệu cách bạn có thể sử dụng hàm crypt() trong PHP để tạo hàm băm SHA-256 của một chuỗi đã chỉ định
PHP xác định một loại muối cho SHA-256 bằng sự hiện diện của “$2y$06$PiMyLifeUpExampleSalt17” khi bắt đầu muối. Sau đó, bạn có thể tùy chọn chỉ định số vòng băm sẽ chạy trước khi hoàn thành. Càng nhiều vòng, hàm băm càng mất nhiều thời gian để hoàn thành
Sau đó, chúng tôi xuất kết quả băm ra màn hình bằng cách sử dụng từ khóa “$string = "PiMyLifeUp";1”
pi27. Ví dụ cuối cùng của chúng tôi cho bạn thấy loại băm cuối cùng mà hàm crypt() của PHP hỗ trợ. Loại băm đó là SHA-512
Để yêu cầu hàm crypt() tạo hàm băm SHA-512, bạn cần bắt đầu muối với “$5$rounds=6000$PiMyLifeUpExampl$ $5$PiMyLifeUpExampl$4“. Theo tùy chọn, bạn có thể đặt số vòng để tạo hàm băm. Cuối cùng, bạn kết thúc chuỗi bằng muối 16 ký tự
pi38. Phiên bản cuối cùng của mã của bạn sẽ trông giống như những gì chúng tôi đã hiển thị bên dưới
pi49. Sau khi chạy đoạn mã trên, bạn sẽ nhận được kết quả như sau
Với kết quả này, bạn có thể thấy các giá trị băm khác nhau được tạo cho chuỗi “$string = "PiMyLifeUp";3” của chúng tôi
pi5Phần kết luận
Hy vọng rằng, tại thời điểm này, bạn đã hiểu rõ về cách bạn có thể sử dụng hàm crypt() trong PHP
Hàm này cho phép bạn tạo các giá trị băm của bất kỳ chuỗi nào bạn nhập vào. Mặc dù không phải là chức năng đơn giản nhất để sử dụng, nhưng nó rất mạnh mẽ. Ngoài ra, nó có hỗ trợ cho các thuật toán băm hữu ích khác nhau
Vui lòng bình luận bên dưới nếu bạn gặp sự cố khi sử dụng hàm crypt()
Chúng tôi cũng có rất nhiều hướng dẫn PHP khác nếu bạn muốn khám phá thêm về ngôn ngữ này. Nếu bạn muốn học một ngôn ngữ lập trình mới, hãy xem nhiều hướng dẫn viết mã khác của chúng tôi