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`函数用于解密数据,它接受加密后的数据和密钥作为参数,并返回

解密后的原始数据。该函数首先对数据进行解码,然后提取初始化向量和消

息认证码,并计算实际的消息认证码。如果消息认证码验证失败,则解密失

败。最后,我们使用示例密钥和数据进行加密和解密的演示。


本文标签: 数据 加密 认证码 消息 进行