PHP – Encryption

Các phiên bản đầu tiên của PHP đã bao gồm mở rộng mcrypt, cung cấp khả năng mã hóa/giải mã. Do thiếu sự bảo trì, mở rộng mcrypt đã bị ngừng sử dụng và bị loại bỏ từ phiên bản PHP 7.2 trở đi. PHP hiện nay bao gồm thư viện OpenSSL, có chức năng phong phú để hỗ trợ các tính năng mã hóa và giải mã.

OpenSSL hỗ trợ nhiều thuật toán mã hóa khác nhau như AES (Tiêu chuẩn Mã hóa Nâng cao). Tất cả các thuật toán được hỗ trợ có thể được lấy bằng cách gọi hàm openssl_get_cipher_methods().

Hai chức năng quan trọng trong phần mở rộng OpenSSL là −

  • openssl_encrypt() − Mã hóa dữ liệu

  • openssl_decrypt() − Giải mã dữ liệu

The openssl_encrypt() Function

Hàm này mã hóa dữ liệu đã cho bằng phương pháp và khóa đã cho, và trả về một chuỗi thô hoặc chuỗi mã hóa base64.

openssl_encrypt(
   string $data,
   string $cipher_algo,
   string $passphrase,
   int $options = 0,
   string $iv = "",
   string &$tag = null,
   string $aad = "",
   int $tag_length = 16
): string|false

Hàm có các parameters sau:

Sr.No Parameter & Description
1 data The plaintext message data to be encrypted.
2 cipher_algo The cipher method.
3 passphrase The passphrase. If the passphrase is shorter than expected, padded with NULL characters; if the passphrase is longer than expected, it is truncated.
4 options options is a bitwise disjunction of the flags OPENSSL_RAW_DATA and OPENSSL_ZERO_PADDING.
5 iv A non-NULL Initialization Vector.
6 tag The authentication tag passed by reference when using AEAD cipher mode (GCM or CCM).
7 aad Additional authenticated data.
8 tag_length The length of the authentication tag. Its value can be between 4 and 16 for GCM mode.

Hàm trả về chuỗi đã được mã hóa khi thành công hoặc false khi thất bại.

The openssl_decrypt() Function

Hàm này nhận một chuỗi thô hoặc chuỗi được mã hóa base64 và giải mã nó bằng cách sử dụng một phương pháp và khóa đã cho.

openssl_decrypt(
   string $data,
   string $cipher_algo,
   string $passphrase,
   int $options = 0,
   string $iv = "",
   ?string $tag = null,
   string $aad = ""
): string|false

Hàm openssl_decrypt() sử dụng các tham số giống như hàm openssl_encrypt .

Hàm này trả về chuỗi đã được giải mã thành công hoặc false nếu thất bại.

Example

Hãy xem xét ví dụ sau −

<?php
   function sslencrypt($source, $algo, $key, $opt, $iv) {
      $encstring = openssl_encrypt($source, $algo, $key, $opt, $iv);
      return $encstring;
   }

   function ssldecrypt($encstring, $algo, $key, $opt, $iv) {
      $decrstring = openssl_decrypt($encstring, $algo, $key, $opt, $iv);
      return $decrstring;
   }

   // string to be encrypted
   $source = "PHP: Hypertext Preprocessor";

   // Display the original string
   echo "Before encryption: " . $source . "\n";
   $algo = "BF-CBC";
   $opt=0;
   $ivlength = openssl_cipher_iv_length($algo);
   $iv = random_bytes($ivlength);
   $key = "abcABC123!@#"; 

   // Encryption process
   $encstring = sslencrypt($source, $algo, $key, $opt, $iv);

   // Display the encrypted string
   echo "Encrypted String: " . $encstring . "\n";

   // Decryption process
   $decrstring = ssldecrypt($encstring, $algo, $key, $opt, $iv);

   // Display the decrypted string
   echo "Decrypted String: " . $decrstring;
?>

Nó sẽ tạo ra output

Before encryption: PHP: Hypertext Preprocessor
Encrypted String: 
Decrypted String: