Hash Functions in PHP
Bài đăng này đã không được cập nhật trong 5 năm
Hash Functions
1. Danh sách các hàm
| Hàm | Mô tả | 
|---|---|
| md5() | Chuyển một chuỗi sang dạng một chuỗi mới đã được mã hóa theo tiêu chuẩn MD5 (32 bít). (Trong PHP không hỗ trợ giải mã một chuỗi đã mã hóa MD5 sang dạng ban đầu.) | 
| sha1() | Chuyển một chuỗi sang một chuỗi mới đã được mã hóa theo tiêu chuẩn sha1. (Trong php không có hàm nào hỗ trợ chuyển một chuỗi đã được sử dụngsha1()sang chuỗi ban đầu.) | 
| md5_file() | Chỉ định một file bất kì để chuyển sang một chuỗi được mã hóa theo tiêu chuẩn MD5(32 bit) , (trong PHP không hỗ trợ giải mã một chuỗi đã mã hóa MD5sang dạng ban đầu, hàm này khá giống với hàmmd5();) | 
| hash_algos() | Hàm hash_algos()trả về một mảng bao gồm danh sách các thuật toán mã hóa được hỗ trợ. | 
| hash() | Hàm hash()sẽ mã hóa truyền vào theo một thuật toán nhất định. | 
| hash_init() | Hàm hash_init()sẽ quy định thuật toán mã hóa. | 
| hash_update() | Hàm hash_update()sẽ tiến hành cập nhật chuỗi cần mã hóa và tài nguyên quy định thuật toán mã hóa từ hàm hash_init() vào quá trình mã hóa. | 
| hash_final() | Hàm hash_final()sẽ hoàn thành bước cuối cùng trong quá trình mã hóa và nhận về kết quả mã hóa. | 
| hash_copy() | Hàm hash_copy()sẽ sao chép tài nguyên quy định thuật toán mã hóa và lưu vào biến nào đó. | 
| hash_file() | Hàm hash_file()sẽ mã hóa nội dung của file được truyền vào theo thuật toán nhất định. | 
| hash_equals() | Hàm hash_equals()sẽ so sánh hai chuỗi đã được mã hóa xem chúng có giống nhau hay không | 
2. Chi tiết về các hàm
2.1. md5
Cú pháp
md5(string $str [, bool $raw_output = FALSE]) // Hàm sẽ trả về một chuỗi thập lục phân với chiều dài 32 ký tự (đã mã hóa)
Trong đó:
$strlà chuỗi bạn muốn mã hóa
$raw_outputcó giá trị true hoặcfalse, mặc định làfalse:
- Nếu
true: hàm sẽ trả về chuỗi nhị phân 16 ký tự đã mã hóa- Nếu
false: hàm trả về chuỗi bình thường gồm 32 ký tự đã mã hóa
Ví dụ:
Mã hóa với $row_output = false
$str = 'truongthinhi';
echo md5($str); // 3679eb61591196c7fbb4591986a8df89
echo md5($str, false); // 3679eb61591196c7fbb4591986a8df89
Mã hóa với $row_output = true
$str = 'truongthinhi';
echo md5($str, true); // 6y�aY����Y��߉
2.2. sha1
Cú pháp:
sha1(string $str [, bool $raw_output = FALSE]) // Trả ra một chuỗi số thập lục phân với chiều dài 40 ký tự
Trong đó:
$strlà chuỗi cần mã hóa
$raw_outputcó giá trịtruehoặcfalse, mặc định làfalse.
- Nếu
truethì hàm sẽ trả về chuỗi nhị phân với 20 ký tự (đã mã hóa)- Nếu
falsethì hàm trả về chuỗi thập lục phân gồm 40 ký tự (đã mã hóa)
Ví dụ:
Mã hóa với $raw_output = false
$str = 'truongthinhi';
echo sha1($str); // ec74b54dc6251b3e8964812aacf4c65c2e059122
echo sha1($str, false); // ec74b54dc6251b3e8964812aacf4c65c2e059122
Mã hóa với $raw_output = true
$str = 'truongthinhi';
echo sha1($str, true); // ec74b54dc6251b3e8964812aacf4c65c2e059122
2.3. md5_file
Cú pháp:
string md5_file(string $str [, bool $raw_output = false])
// Hàm sẽ trả về một chuỗi thập lục phân với chiều dài 32 ký tự (đã mã hóa)
Trong đó:
$strlà chuỗi bạn muốn mã hóa
$raw_outputcó giá trị true hoặcfalse, mặc định làfalse:
- Nếu
true: hàm sẽ trả về chuỗi nhị phân 16 ký tự đã mã hóa- Nếu
false: hàm trả về chuỗi bình thường gồm 32 ký tự đã mã hóa Ví dụ:
Mã hóa với $row_output = false
// Các bạn tạo file mới trên local trước đã nha, file mới của mình tên là testHashFile.txt
file_put_contents("testHashFile.txt", "Mình đang test hàm hash_file nha.");
$file = 'testHashFile.txt';
echo md5_file($file, false); // ec93df26a79d51c7bb2bebe5b2bbc945
Mã hóa với $row_ouput = true
$file = 'testHashFile.txt';
echo md5_file($file, true); //
2.4. hash_algos
Cú pháp:
hash_algos(); // Hàm sẽ trả về một mảng liên tục chứa danh sách các thuật toán mã hóa được hỗ trợ.
Ví dụ:
$arr = hash_algos();
print_r($arr);
Kết quả:
Array
(
    [0] => md2
    [1] => md4
    [2] => md5
    [3] => sha1
    [4] => sha224
    [5] => sha256
    [6] => sha384
    [7] => sha512/224
    [8] => sha512/256
    [9] => sha512
    [10] => sha3-224
    [11] => sha3-256
    [12] => sha3-384
    [13] => sha3-512
    [14] => ripemd128
    [15] => ripemd160
    [16] => ripemd256
    [17] => ripemd320
    [18] => whirlpool
    [19] => tiger128,3
    [20] => tiger160,3
    [21] => tiger192,3
    [22] => tiger128,4
    [23] => tiger160,4
    [24] => tiger192,4
    [25] => snefru
    [26] => snefru256
    [27] => gost
    [28] => gost-crypto
    [29] => adler32
    [30] => crc32
    [31] => crc32b
    [32] => crc32c
    [33] => fnv132
    [34] => fnv1a32
    [35] => fnv164
    [36] => fnv1a64
    [37] => joaat
    [38] => haval128,3
    [39] => haval160,3
    [40] => haval192,3
    [41] => haval224,3
    [42] => haval256,3
    [43] => haval128,4
    [44] => haval160,4
    [45] => haval192,4
    [46] => haval224,4
    [47] => haval256,4
    [48] => haval128,5
    [49] => haval160,5
    [50] => haval192,5
    [51] => haval224,5
    [52] => haval256,5
)
2.5. hash
Cú pháp:
hash($algo, $str, $raw_output);
// Hàm sẽ trả về chuỗi được tính toán dưới dạng nhị phân nếu $raw_output mang giá trị TRUE,
// và trả về chuỗi được tính toán dưới dạng thập phân nếu $raw_output mang giá trị FALSE .
Trong đó:
$algolà thuật toán mã hóa.
$strlà chuỗi cần mã hóa.
$raw_outputlà tham số, mặc định mang giá trịFALSEchuỗi trả về sẽ là chuỗi in thường thập phân. Nếu$raw_outputmang giá trịTRUEchuỗi trả về sẽ là chuỗi theo kiểu nhị phân.
Ví dụ:
Mã hóa theo kiểu "ripemd160":
echo hash('ripemd160', 'The quick brown fox jumped over the lazy dog.'); // 92a5ec97824260974efb2a3a3d07c48df1afe99a
echo hash('ripemd160', 'The quick brown fox jumped over the lazy dog.', true); // ��엂B`�N�*:=č��
Mã hóa theo kiểu "md5":
echo hash('md5', 'The quick brown fox jumped over the lazy dog.'); // 1397c8e097423f2099d29fc72143b3e6
echo md5("The quick brown fox jumped over the lazy dog."); // 41bf1887028c20e22b00c84d08ec192c
2.6. hash_init
Cú pháp:
hash_init($algo);
// Hàm sẽ trả về một tài nguyên quy định thuật toán mã hóa,
// tài nguyên này sẽ được sử dụng trong các hàm hash_update(), hash_update_stream(), hash_update_file(), và hash_final().
Trong đó:
$algolà thuật toán mã hóa.
Ví dụ:
$ctx = hash_init('md5');
hash_update($ctx, 'This a test string');
echo hash_final($ctx); // d25a9357d0b6daa60fae67ab419a1f20
2.7. hash_update
Trong trường hợp ta muốn thay đổi thuật toán mã hóa hoặc chuỗi cần mã hóa, ta sẽ sử dụng hàm hash_update()
Cú pháp:
hash_update($context, $str);
// Hàm luôn trả về TRUE nếu $context là một tài nguyên hợp lê. Nếu $context không hợp lệ hàm sẽ báo lỗi.
Trong đó:
$contextlà tài nguyên quy định thuật toán mã hóa. Nó chính là kết quả trả về từ hàmhash_init().
$strlà chuỗi cần mã hóa.
Ví dụ:
$ctx = hash_init('md5');
echo hash_update($ctx, 'this is a test'); // 1
echo hash_final($ctx); // 54b0c58c7ce9f2a8b551351102ee0938
echo  md5('this is a test'); // 54b0c58c7ce9f2a8b551351102ee0938
2.8. hash_final
Cú pháp:
hash_final($context, $raw_output); // Hàm chả về chuỗi đã được mã hóa.
Trong đó:
$contextsẽ là tài nguyên quy định thuật toán mã hóa.$contextchính là kết quả của hàmhash_init().
$raw_outputlà tham số không bắt buộc, giá trị mặc định làFALSE.
- Nếu
$raw_output = FALSE, hàmhash_final()sẽ trả về kết quả là chuỗi thập phân in thường.- Nếu
$raw_output = TRUE, hàmhash_final()sẽ trả về kết quả là chuỗi nhị phân.
Ví dụ:
Sử dụng hàm hash_final() nhận kết quả là chuỗi thập phân in thường:
$ctx = hash_init('md5');
hash_update($ctx, 'this is a test');
echo hash_final($ctx); // 54b0c58c7ce9f2a8b551351102ee0938
2.9. hash_copy
Cú pháp:
hash_copy($context); 
// Hàm sẽ trả về một tài nguyên quy định thuật toán mã hóa. Tài nguyên tương đương với tài nguyên truyền vào.
Trong đó:
$contextlà tài nguyền quy định thuật toán mã hóa.$contextlà kết quả trả về của hàmhash_init().
Ví dụ:
$ctx = hash_init('md5');
hash_update($ctx, 'This is a test');
$copy = hash_copy($ctx);
echo hash_final($ctx); // ce114e4501d2f4e2dcea3e17b546f339
echo hash_final($copy); // ce114e4501d2f4e2dcea3e17b546f339
2.10. hash_file
Cú pháp:
hash_file($algo, $filename, $raw_output);
// Kết quả trả về  là một chuỗi đã được mã hóa từ nội dung của file truyền vào.
Trong đó:
$algolà tên của thuật toán mã hóa( md5, md4 .v.v.).
$filenamelà đường dẫn tới file cần mã hóa nội dung.
$raw_outputlà tham số không bắt buộc, mặc định mang giá trịFALSE:
- Nếu
$raw_output = FALSE, hàm sẽ trả về chuỗi mã hóa dưới dạng chuỗi thập phân in thường.- Nếu
$raw_output = TRUE, hàm sẽ trả về chuỗi mã hóa dưới dạng chuỗi nhị phân.
Ví dụ:
// Mình lấy luôn file testHashFile.txt ở trên đã tạo nha
echo hash_file('md5', 'testHashFile.txt'); // ec93df26a79d51c7bb2bebe5b2bbc945
2.11. hash_equals
Cú pháp
hash_equals($known_string, $user_string); // Trả về `TRUE` nếu hai chuỗi giống nhau, trả về `FALSE` nếu khác nhau.
$known_stringlà chuỗi đã biết.
$user_stringlà chuỗi mà người dùng chuyền vào dùng để so khớp với$known_string
Ví dụ:
$expected  = crypt('truongthinhi', '$thisismysalt$');
$correct   = crypt('truongthinhi', '$thisismysalt$');
$incorrect = crypt('soccer', '$thisismysalt$');
 
var_dump(hash_equals($expected, $correct)); // bool(true) 
echo "<br />";
var_dump(hash_equals($expected, $incorrect)); // bool(false)
source:
All rights reserved
 
  
 