直接上代码
<?php
// 加密数据
function encryptData($data, $encryption_key, $iv){
return openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv);
}
// 解密数据
function decryptData($data, $encryption_key, $iv){
return openssl_decrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv);
}
// 你的加密密钥
$encryption_key = openssl_random_pseudo_bytes(32);
// 初始化向量
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
// 要加密的数据
$data = "Hello, World!";
// 加密数据
$encrypted = encryptData($data, $encryption_key, $iv);
echo "Encrypted: " . $encrypted . "\n";
// 解密数据
$decrypted = decryptData($encrypted, $encryption_key, $iv);
echo "Decrypted: " . $decrypted . "\n";
?>
解读
定义加密和解密函数
encryptData函数用于加密数据。它接受三个参数:要加密的数据($data)、加密密钥($encryption_key)和初始化向量($iv)。这个函数使用openssl_encrypt函数进行加密,采用的加密算法是aes-256-cbc。
decryptData函数用于解密数据。它也接受相同的三个参数,并使用openssl_decrypt函数进行解密,采用的解密算法与加密时相同。
生成加密密钥和初始化向量:
加密密钥($encryption_key)是通过openssl_random_pseudo_bytes函数生成的32字节(256位)随机数据。这个密钥用于AES-256加密,其中256位指的就是密钥的长度。
初始化向量($iv)是加密时必须的一个参数,它用于确保即便同一数据被加密多次,每次生成的加密文本也都不同。$iv的长度由加密算法决定,在这里使用openssl_cipher_iv_length函数确定aes-256-cbc算法所需的IV长度,然后通过openssl_random_pseudo_bytes函数生成对应长度的随机数据。
加密和解密数据:
要加密的数据($data)被定义为字符串"Hello, World!"。
使用encryptData函数和前面生成的密钥及IV对数据进行加密,加密后的结果存储在$encrypted变量中,并通过echo打印出来。
接着,使用decryptData函数、相同的密钥和IV对加密后的数据进行解密,解密后的结果存储在$decrypted变量中,并同样通过echo打印出来。
这段代码演示了使用AES-256-CBC加密算法进行安全数据加密和解密的完整过程。加密和解密使用的密钥和IV必须保持一致,否则解密过程将失败。此外,这个例子强调了加密密钥和初始化向量应该如何安全地生成和存储,这对保证加密过程的安全至关重要。
标签:加密,函数,openssl,解密,密钥,PHP,256
From: https://www.cnblogs.com/79524795-Tian/p/18113223