基础定义
openssl_encrypt
# 以指定的方式和 key 加密数据,返回原始或 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
data
待加密的明文信息数据。
cipher_algo
密码学方式。openssl_get_cipher_methods() 可获取有效密码方式列表。
passphrase
口令(passphrase)。 若 passphrase 比预期长度短,将静默用 NUL 填充; 若比预期长度更长,将静默截断。
options
options 是以下标记的按位或: OPENSSL_RAW_DATA 、 OPENSSL_ZERO_PADDING。
iv
非 NULL 的初始化向量。
tag
使用 AEAD 密码模式(GCM 或 CCM)时传引用的验证标签。
aad
附加的验证数据。
tag_length
验证 tag 的长度。GCM 模式时,它的范围是 4 到 16。
openssl_decrypt
# 采用原始或base64编码的字符串,并使用给定的方法和密钥对其进行解密
openssl_decrypt(
string $data,
string $method,
string $key,
int $options = 0,
string $iv = "",
string $tag = "",
string $aad = ""
): string
data
将被解密的密文。
method
加密算法,使用openssl_get_cipher_methods()函数获取可用的加密算法列表。
key
密钥。
options
options can be one of OPENSSL_RAW_DATA, OPENSSL_ZERO_PADDING.
iv
非空的初始化向量。
tag
AEAD密码模式中的身份验证标签。 如果是错误的,验证失败,函数返回false.
aad
额外的认证数据。
操作
<?php
$arr = ['a'=>1, 'b'=>2];
$data = json_encode($arr);//加密明文
$method = 'DES-ECB';//加密方法
$passwd = '12344321';//加密密钥
$options = 0;//数据格式选项(可选)
$iv = '';//加密初始化向量(可选)
$result = openssl_encrypt($data, $method, $passwd, $options);
var_dump($result);
$res = openssl_decrypt($result, $method, $passwd, $options);
var_dump($res);
var_dump(json_decode($res, true));
结果
string(24) "GJv+LHgxK4NZzNFcjfJPhg=="
string(13) "{"a":1,"b":2}"
array(2) {
["a"]=>
int(1)
["b"]=>
int(2)
}
|