PHP AES加解密示例

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

// 密钥和初始化向量(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解码。最后,我们提供了示例用法,展示了如何使用这些函数进行加密和解密操作。

你可能感兴趣的:(php)