php实现aes加密类分享


下面是一个简单的PHP类实现,用于AES加密和解密。这个类使用了PHP内置的`openssl_encrypt`和`openssl_decrypt`函数,它们支持AES加密。请注意,为了使用AES加密,你需要一个密钥(key)和一个初始化向量(IV)。在实际应用中,密钥和IV应该是安全的,并且应该保持机密。


<?php

class AesEncryptDecrypt
{
    private $key;
    private $iv;

    /**
     * 构造函数,初始化密钥和IV
     *
     * @param string $key 加密密钥,长度应为16(AES-128)、24(AES-192)或32(AES-256)字节
     * @param string $iv 初始化向量,长度应与密钥相同
     */
    public function __construct($key, $iv)
    {
        $this->key = $key;
        $this->iv = $iv;
    }

    /**
     * 使用AES加密数据
     *
     * @param string $data 要加密的数据
     * @return string 加密后的数据
     */
    public function encrypt($data)
    {
        // 加密方法
        $method = 'AES-256-CBC'; // 你可以根据需要更改AES的版本

        // 加密数据
        $encrypted = openssl_encrypt($data, $method, $this->key, OPENSSL_RAW_DATA, $this->iv);

        // 返回Base64编码的加密数据,以便安全地传输和存储
        return base64_encode($encrypted);
    }

    /**
     * 使用AES解密数据
     *
     * @param string $encryptedData 加密后的数据(应为Base64编码)
     * @return string 解密后的数据
     */
    public function decrypt($encryptedData)
    {
        // 解密方法应与加密时使用的相同
        $method = 'AES-256-CBC';

        // 先将Base64编码的数据解码
        $data = base64_decode($encryptedData);

        // 解密数据
        $decrypted = openssl_decrypt($data, $method, $this->key, OPENSSL_RAW_DATA, $this->iv);

        return $decrypted;
    }
}

// 使用示例
$aes = new AesEncryptDecrypt('your-secret-key-here', 'your-initialization-vector-here');
$encrypted = $aes->encrypt('Hello, World!');
echo "Encrypted: " . $encrypted . "\n";
$decrypted = $aes->decrypt($encrypted);
echo "Decrypted: " . $decrypted . "\n";

?>

在这个例子中,`AesEncryptDecrypt`类有两个主要的方法:`encrypt`用于加密数据,`decrypt`用于解密数据。请注意,你需要将`'your-secret-key-here'`和`'your-initialization-vector-here'`替换为你自己的密钥和IV。

加密时,我们使用`openssl_encrypt`函数,并通过`OPENSSL_RAW_DATA`选项获取原始加密数据,然后将其编码为Base64字符串,以便安全地传输和存储。解密时,我们首先将Base64编码的字符串解码为原始加密数据,然后使用`openssl_decrypt`函数进行解密。

请确保密钥和IV的长度与你选择的AES版本相匹配。在这个例子中,我使用了AES-256-CBC,因此密钥和IV都应该是32字节长。如果你选择其他版本的AES,密钥和IV的长度将有所不同。