PHP AES加解密示例
一、引言
AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它提供了一种安全的方式来保护数据的机密性和完整性。在PHP中,你可以使用内建的openssl
扩展来进行AES加解密操作。下面是一个简单的PHP AES加解密示例,帮助你了解如何使用PHP进行AES加密和解密。
二、准备工作
在进行AES加解密之前,你需要确保你的PHP环境已经启用了openssl
扩展。你可以通过在PHP配置文件(php.ini)中添加以下行来启用它:
makefile
extension=openssl |
然后重新启动你的Web服务器以使更改生效。
三、加密和解密过程
下面是一个使用AES-256-CBC模式进行加解密的示例:
php
<?php |
// 密钥和初始化向量(IV)的长度应与所选的AES模式相匹配 |
$key = 'your-secret-key'; // 密钥长度应为32字节(256位) |
$iv = 'your-initialization-vector'; // 初始化向量长度应为16字节(128位) |
// 加密数据 |
function encryptData($data, $key, $iv) { |
$encryptedData = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); |
$encryptedData = base64_encode($encryptedData); // 对加密数据进行Base64编码,以便于传输和存储 |
return $encryptedData; |
} |
// 解密数据 |
function decryptData($encryptedData, $key, $iv) { |
$encryptedData = base64_decode($encryptedData); // 对Base64编码的加密数据进行解码 |
$decryptedData = openssl_decrypt($encryptedData, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); |
return $decryptedData; |
} |
// 示例用法 |
$data = 'Hello, World!'; // 需要加密的数据 |
$encryptedData = encryptData($data, $key, $iv); // 加密数据 |
echo 'Encrypted Data: ' . $encryptedData . "\n"; |
$decryptedData = decryptData($encryptedData, $key, $iv); // 解密数据 |
echo 'Decrypted Data: ' . $decryptedData . "\n"; |
?> |
在上面的示例中,我们定义了两个函数encryptData()
和decryptData()
,分别用于加密和解密数据。你需要提供一个密钥($key
)和初始化向量($iv
),并使用它们来调用openssl_encrypt()
和openssl_decrypt()
函数。加密后的数据将进行Base64编码,以方便传输和存储。解密之前,你需要对加密数据进行Base64解码。
请注意,密钥和初始化向量(IV)的长度应与所选的AES模式相匹配。对于AES-256-CBC模式,密钥长度应为32字节(256位),初始化向量长度应为16字节(128位)。确保在生成密钥和初始化向量时使用安全的随机值。
Python AES加解密示例
一、引言
在Python中,你可以使用标准库中的cryptography
模块来进行AES加解密操作。AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,能够提供安全的数据保护。下面是一个简单的Python AES加解密示例,帮助你了解如何使用Python进行AES加密和解密。
二、安装cryptography模块
在开始之前,你需要安装cryptography
模块。你可以使用pip来安装它:
pip install cryptography |
三、加密和解密过程
下面是一个使用AES-256-CBC模式进行加解密的示例:
python
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes |
from cryptography.hazmat.primitives import padding |
from cryptography.hazmat.backends import default_backend |
import os |
# 密钥和初始化向量(IV)的长度应与所选的AES模式相匹配 |
key = os.urandom(32) # 生成32字节(256位)的随机密钥 |
iv = os.urandom(16) # 生成16字节(128位)的随机初始化向量 |
# 加密数据 |
def encrypt_data(data, key, iv): |
padder = padding.PKCS7(128).padder() |
padded_data = padder.update(data.encode()) + padder.finalize() |
encryptor = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()).encryptor() |
cipher_text = encryptor.update(padded_data) + encryptor.finalize() |
return base64.b64encode(cipher_text).decode() # 对加密数据进行Base64编码,以便于传输和存储 |
# 解密数据 |
def decrypt_data(encrypted_data, key, iv): |
decoded_data = base64.b64decode(encrypted_data) # 对Base64编码的加密数据进行解码 |
decryptor = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()).decryptor() |
decrypted_data = decryptor.update(decoded_data) + decryptor.finalize() |
unpadder = padding.PKCS7(128).unpadder() |
unpadded_data = unpadder.update(decrypted_data) + unpadder.finalize() |
return unpadded_data.decode() # 返回解密后的原始数据 |
# 示例用法 |
data = "Hello, World!" # 需要加密的数据 |
encrypted_data = encrypt_data(data, key, iv) # 加密数据 |
print("Encrypted Data:", encrypted_data) |
decrypted_data = decrypt_data(encrypted_data, key, iv) # 解密数据 |
print("Decrypted Data:", decrypted_data) |
在上面的示例中,我们首先导入了所需的模块和函数。然后,我们定义了两个函数encrypt_data()
和decrypt_data()
,分别用于加密和解密数据。你需要提供一个密钥(key
)和初始化向量(iv
),并使用它们来调用加密和解密函数。加密后的数据将进行Base64编码,以方便传输和存储。解密之前,你需要对加密数据进行Base64解码。最后,我们提供了示例用法,展示了如何使用这些函数进行加密和解密操作。