Php 简明教程
PHP – Encryption
PHP 的早期版本包含 mcrypt 扩展,它提供了加密/解密功能。由于缺乏维护,mycrypt 扩展已从 PHP 7.2 版本中弃用并删除。PHP 现在包含 OpenSSL 库,该库具有广泛的功能来支持加密和解密功能。
OpenSSL 支持各种加密算法,例如 AES(高级加密标准)。可通过调用 openssl_get_cipher_methods() 函数获取所有受支持的算法。
OpenSSL 扩展中的两个重要函数为 -
-
openssl_encrypt() − Encrypts data
-
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: