admin 管理员组文章数量: 1184232
2024年4月23日发(作者:反向代理负载均衡)
php 加密和解密 案例
以下是一个使用 PHP 进行加密和解密的简单案例:
```php
// 加密函数
function encrypt($data, $key) {
$iv = random_bytes(16); // 生成随机的初始化向量
$encrypted = openssl_encrypt($data, 'AES-256-CBC', $key,
OPENSSL_RAW_DATA, $iv);
$mac = hash_hmac('sha256', $encrypted, $key, true); // 计算消息认
证码
$encoded = base64_encode($iv . $mac . $encrypted); // 将初始化向
量、消息认证码和密文拼接并编码为字符串
return $encoded;
}
// 解密函数
function decrypt($data, $key) {
$data = base64_decode($data);
$iv = substr($data, 0, 16); // 获取初始化向量
$mac = substr($data, 16, 32); // 获取消息认证码
$encrypted = substr($data, 48); // 获取密文
$calculatedMac = hash_hmac('sha256', $encrypted, $key, true); //
计算实际消息认证码
if (!hash_equals($mac, $calculatedMac)) {
return false; // 消息认证码验证失败,解密失败
}
$decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', $key,
OPENSSL_RAW_DATA, $iv);
return $decrypted;
}
// 示例用法
$key = 'my-secret-key'; // 密钥,确保长度至少为16个字符(AES-256)
$data = 'Hello, World!'; // 要加密的数据
// 加密数据
$encryptedData = encrypt($data, $key);
echo "加密后的数据: " . $encryptedData . "n";
// 解密数据
$decryptedData = decrypt($encryptedData, $key);
echo "解密后的数据: " . $decryptedData . "n";
>
```
在上述示例中,我们使用了AES-256-CBC加密算法进行数据的加密和解密。
首先,我们定义了`encrypt`函数用于加密数据,它接受要加密的数据和密钥
作为参数,并返回加密后的字符串。该函数使用`openssl_encrypt`函数进
行加密,并使用`hash_hmac`函数计算消息认证码。然后,我们定义了
`decrypt`函数用于解密数据,它接受加密后的数据和密钥作为参数,并返回
解密后的原始数据。该函数首先对数据进行解码,然后提取初始化向量和消
息认证码,并计算实际的消息认证码。如果消息认证码验证失败,则解密失
败。最后,我们使用示例密钥和数据进行加密和解密的演示。
版权声明:本文标题:php 加密和解密 案例 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1713833914a653669.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论