Php 简明教程

PHP – Encryption

PHP 的早期版本包含 mcrypt 扩展,它提供了加密/解密功能。由于缺乏维护,mycrypt 扩展已从 PHP 7.2 版本中弃用并删除。PHP 现在包含 OpenSSL 库,该库具有广泛的功能来支持加密和解密功能。

OpenSSL 支持各种加密算法,例如 AES(高级加密标准)。可通过调用 openssl_get_cipher_methods() 函数获取所有受支持的算法。

OpenSSL 扩展中的两个重要函数为 -

  1. openssl_encrypt() − Encrypts data

  2. openssl_decrypt() − Decrypts data

The openssl_encrypt() Function

此函数使用给定的方法和密钥加密给定数据,并返回原始或 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

该函数具有以下 parameters -

Sr.No

Parameter & Description

1

data 要加密的明文消息数据。

2

cipher_algo The cipher method.

3

passphrase 密码。如果密码短于预期,则用 NULL 字符填充;如果密码长于预期,则将其截断。

4

options options 是标志 OPENSSL_RAW_DATA 和 OPENSSL_ZERO_PADDING 的按位析取。

5

iv A non-NULL Initialization Vector.

6

tag 使用 AEAD 密码模式(GCM 或 CCM)时按引用传递的身份验证标记。

7

aad Additional authenticated data.

8

tag_length 身份验证标记的长度。在 GCM 模式下,其值可以在 4 到 16 之间。

该函数在成功时返回加密字符串,或在失败时返回 false

The openssl_decrypt() Function

此函数获取原始或 base64 编码的字符串并使用给定的方法和密钥对其解密。

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

openssl_decrypt() 函数使用与 openssl_encrypt 函数相同的参数。

此函数在成功时返回解密字符串,或在失败时返回 false。

Example

请看以下示例:

<?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;
?>

它将生成以下 output

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