PHP 早期版本的 mcrypt 扩展提供 加密/解密 功能。由于缺乏维护,现在 mycrypt 扩展已被弃用,并从 PHP 7.2 版本开始删除。PHP 现在最新支持 OpenSSL 库,该库具有支持加密和解密功能的广泛功能。
OpenSSL 支持各种加密算法,例如 AES(高级加密标准)。所有支持的算法都可以通过调用 openssl_get_cipher_methods() 函数来获得。
OpenSSL 扩展中的两个重要功能是 -
- openssl_encrypt() − 加密数据
- openssl_decrypt() - 解密数据
openssl_encrypt() 函数
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
openssl_encrypt() 函数具有以下参数 -
参数 | 描述 |
---|---|
data | 需要加密的明文消息数据。 |
cipher_algo | 密码方法。 |
passphrase | 密码。如果密码短于预期,则填充 NULL 字符;如果密码长度超过预期,则将被截断。 |
options | options 是标志 OPENSSL_RAW_DATA 和 OPENSSL_ZERO_PADDING 的按位析取。 |
iv | 非 NULL 初始化向量。 |
tag | 使用 AEAD 密码模式(GCM 或 CCM)时通过引用传递的身份验证标签。 |
aad | 其他经过身份验证的数据。 |
tag_length | 身份验证标记的长度。对于 GCM 模式,其值可以介于 4 和 16 之间。 |
openssl_encrypt() 函数在成功时返回加密字符串,在失败时返回 false。
openssl_decrypt() 函数
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() 函数相同的参数。
openssl_decrypt() 函数在成功时返回解密的字符串,在失败时返回 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:超文本预处理器";
// 显示原始字符串
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:超文本预处理器
加密字符串:
解密字符串:
加密字符串:
解密字符串: