PHP怎么做数据加密?

文章导读
上一个 测验 下一个 PHP 的早期版本包含 mcrypt 扩展,该扩展提供了加密/解密功能。由于缺乏维护,mcrypt 扩展已被弃用并从 PHP 7.2 版本起移除。PHP 现在包含 OpenSSL 库,该库具有广泛的功能来支持加密和解密特性。
📋 目录
  1. A openssl_encrypt() 函数
  2. B openssl_decrypt() 函数
A A

PHP 加密



上一个
测验
下一个

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

OpenSSL 支持各种加密算法,例如 AES(Advanced Encryption Standard)。所有支持的算法可以通过调用 openssl_get_cipher_methods() 函数获取。

OpenSSL 扩展中的两个重要函数是 −

  • openssl_encrypt() − 加密数据

  • openssl_decrypt() − 解密数据

openssl_encrypt() 函数

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

该函数具有以下 参数

序号 参数 & 描述
1

data

要加密的明文消息数据。

2

cipher_algo

加密方法。

3

passphrase

密码短语。如果密码短语比预期短,则用 NULL 字符填充;如果比预期长,则截断。

4

options

options 是 OPENSSL_RAW_DATA 和 OPENSSL_ZERO_PADDING 标志的按位或。

5

iv

非 NULL 的初始化向量。

6

tag

使用 AEAD cipher mode(GCM 或 CCM)时通过引用传递的认证标签。

7

aad

额外的认证数据。

8

tag_length

认证标签的长度。对于 GCM 模式,其值可以在 4 到 16 之间。

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

openssl_decrypt() 函数

该函数接收原始字符串或 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。

示例

查看以下示例 −

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

   // 要加密的字符串
   $source = "PHP: Hypertext Preprocessor";

   // 显示原始字符串
   echo "加密前: " . $source . "\n";
   $algo = "BF-CBC";
   $opt=0;
   $ivlength = openssl_cipher_iv_length($algo);
   $iv = random_bytes($ivlength);
   $key = "abcABC123!@#"; 

   // 加密过程
   $encstring = sslencrypt($source, $algo, $key, $opt, $iv);

   // 显示加密字符串
   echo "加密字符串: " . $encstring . "\n";

   // 解密过程
   $decrstring = ssldecrypt($encstring, $algo, $key, $opt, $iv);

   // 显示解密字符串
   echo "解密字符串: " . $decrstring;
?>

它将产生以下 输出

加密前: PHP: Hypertext Preprocessor
加密字符串: 
解密字符串: