Mã hóa chuỗi trong php

Hash Functions

1. Danh sách các hàm

HàmMô 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ụng sha1[] 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 MD5 sang dạng ban đầu, hàm này khá giống với hàm md5[];]
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 đó:

$str là chuỗi bạn muốn mã hóa
$raw_output có giá trị true hoặc false, 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 đó:

$str là chuỗi cần mã hóa
$raw_output có giá trị true hoặc false, mặc định là false.

  • Nếu true thì hàm sẽ trả về chuỗi nhị phân với 20 ký tự [đã mã hóa]
  • Nếu false thì 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 đó:

$str là chuỗi bạn muốn mã hóa
$raw_output có giá trị true hoặc false, 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 đó:

$algo là thuật toán mã hóa.
$str là chuỗi cần mã hóa.
$raw_output là tham số, mặc định mang giá trị FALSE chuỗi trả về sẽ là chuỗi in thường thập phân. Nếu $raw_output mang giá trị TRUE chuỗ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 đó:

$algo là 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 đó:

$context là tài nguyên quy định thuật toán mã hóa. Nó chính là kết quả trả về từ hàm hash_init[].
$str là 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 đó:

$context sẽ là tài nguyên quy định thuật toán mã hóa. $context chính là kết quả của hàm hash_init[].
$raw_output là tham số không bắt buộc, giá trị mặc định là FALSE.

  • Nếu $raw_output = FALSE, hàm hash_final[] sẽ trả về kết quả là chuỗi thập phân in thường.
  • Nếu $raw_output = TRUE, hàm hash_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 đó:

$context là tài nguyền quy định thuật toán mã hóa. $context là kết quả trả về của hàm hash_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 đó:

$algo là tên của thuật toán mã hóa[ md5, md4 .v.v.].
$filename là đường dẫn tới file cần mã hóa nội dung.
$raw_output là 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_string là chuỗi đã biết.
$user_string là 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 "
"
; var_dump[hash_equals[$expected, $incorrect]]; // bool[false]

source:

//www.php.net/manual/en/function.hash.php

Chủ Đề