直接上代码
<?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必须保持一致,否则解密过程将失败。此外,这个例子强调了加密密钥和初始化向量应该如何安全地生成和存储,这对保证加密过程的安全至关重要。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通