在 PHP 中使用 AES(Advanced Encryption Standard)进行加密和解密通常涉及使用 OpenSSL 扩展。以下是使用 PHP 进行 AES 加密和解密的基本原理:
### AES 加密:
1. **选择加密算法和模式**:
- AES 是一种对称加密算法,常用的模式包括 ECB、CBC、CFB、OFB 等。
2. **生成密钥和初始化向量(IV)**:
- 生成一个密钥和一个初始化向量(IV),密钥通常是一个固定长度的字符串,IV 是用于增加加密强度的随机值。
3. **加密数据**:
- 使用 OpenSSL 函数(如 `openssl_encrypt`)对明文数据进行加密。
- 提供明文数据、加密算法、密钥、初始化向量和选项等参数。
- 例如:`openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv)`。
4. **获取加密后的密文**:
- 加密后的数据将以二进制格式返回,通常可以使用 Base64 编码将其转换为可打印字符。
### AES 解密:
1. **解密数据**:
- 使用 OpenSSL 函数(如 `openssl_decrypt`)对密文数据进行解密。
- 提供密文数据、加密算法、密钥、初始化向量和选项等参数。
- 例如:`openssl_decrypt($encryptedData, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv)`。
2. **获取解密后的明文**:
- 解密后的数据将以二进制格式返回,可能需要根据具体情况进行进一步处理。
在 PHP 中使用 OpenSSL 扩展可以很容易地实现 AES 加密和解密。以下是一个简单的示例代码,演示如何在 PHP 中使用 AES-256-CBC 加密和解密数据:
```php <?php function encryptAES($data, $key, $iv) { $encrypted = openssl_encrypt($data, 'AES-256-CBC', $key, 0, $iv); return base64_encode($encrypted); } function decryptAES($data, $key, $iv) { $decrypted = openssl_decrypt(base64_decode($data), 'AES-256-CBC', $key, 0, $iv); return $decrypted; } $key = 'YourSecretKey'; // 密钥,必须是 16、24 或 32 字符长度的字符串 $iv = 'YourIV1234567890'; // 初始化向量,必须是 16 字符长度的字符串 $data = 'Hello, World!'; $encryptedData = encryptAES($data, $key, $iv); echo "Encrypted Data: $encryptedData\n"; $decryptedData = decryptAES($encryptedData, $key, $iv); echo "Decrypted Data: $decryptedData\n"; ?> ```
在上面的示例中:
- `encryptAES` 函数用于对数据进行 AES 加密,返回 base64 编码后的密文。
- `decryptAES` 函数用于对密文进行 AES 解密,返回解密后的明文。
- `key` 是用于加密和解密的密钥,必须是 16、24 或 32 字符长度的字符串。
- `iv` 是用于 AES 加密的初始化向量,必须是 16 字符长度的字符串。
- `$data` 是要加密的原始数据。
请确保在实际应用中妥善保管密钥和初始化向量,并根据需求选择合适的密钥长度和加密模式。