php实现的AES加密类定义与用法示例

下面我将详细讲解“PHP实现的AES加密类定义与用法示例”的攻略。

下面我将详细讲解“PHP实现的AES加密类定义与用法示例”的攻略。

简介

AES是一种对称密钥加密算法,目前广泛使用于各类系统中。在PHP中实现AES加密需要用到openssl扩展。本文将介绍如何在PHP中实现AES加密,并提供一个封装好的AES加密类。

安装openssl扩展

PHP实现AES加密需要安装openssl扩展,如果已经安装则可忽略此步骤。可以通过以下命令安装:

sudo apt-get install openssl
sudo apt-get install libssl-dev
sudo apt-get install php7.0-openssl (根据自己的PHP版本来安装相应的扩展)

AES加密类定义

/**
 * Class Aes
 * AES加密类
 */
class Aes
{
    private $key;
    private $iv;
    private $method;

    /**
     * Aes constructor.
     * @param $key string 密钥
     * @param string $method 加密算法(ECB、CBC、CFB、OFB、NOFB、STREAM)
     * @param string $iv 初始向量
     */
    function __construct($key, $method = 'ECB', $iv = '')
    {
        $this->key = hash('sha256', $key, true);
        $this->method = $method;
        $this->iv = $iv;
    }

    /**
     * 加密方法
     * @param $data string 需要加密的字符串
     * @return string 加密后的字符串
     */
    public function encrypt($data)
    {
        switch ($this->method) {
            case 'ECB':
                $iv = chr(0);
                break;
            case 'CBC':
            case 'CFB':
            case 'OFB':
            case 'NOFB':
            case 'STREAM':
                $iv = $this->iv;
                break;
            default:
                $iv = '';
                break;
        }
        return base64_encode(openssl_encrypt($data, 'AES-256-' . $this->method, $this->key, OPENSSL_RAW_DATA, $iv));
    }

    /**
     * 解密方法
     * @param $data string 需要解密的字符串
     * @return string 解密后的字符串
     */
    public function decrypt($data)
    {
        switch ($this->method) {
            case 'ECB':
                $iv = chr(0);
                break;
            case 'CBC':
            case 'CFB':
            case 'OFB':
            case 'NOFB':
            case 'STREAM':
                $iv = $this->iv;
                break;
            default:
                $iv = '';
                break;
        }
        return openssl_decrypt(base64_decode($data), 'AES-256-' . $this->method, $this->key, OPENSSL_RAW_DATA, $iv);
    }
}

示例1:使用ECB模式加密

$key = "thisisakey";
$aes = new Aes($key, 'ECB');
$data = "hello world";
$encrypt_data = $aes->encrypt($data);
echo "加密后的字符串: " . $encrypt_data . "<br/>";
$decrypt_data = $aes->decrypt($encrypt_data);
echo "解密后的字符串: " . $decrypt_data . "<br/>";

示例2:使用CBC模式加密

$key = "thisisakey";
$iv = "thisisiotivector";
$aes = new Aes($key, 'CBC', $iv);
$data = "hello world";
$encrypt_data = $aes->encrypt($data);
echo "加密后的字符串: " . $encrypt_data . "<br/>";
$decrypt_data = $aes->decrypt($encrypt_data);
echo "解密后的字符串: " . $decrypt_data . "<br/>";

以上就是“PHP实现的AES加密类定义与用法示例”的攻略,希望能对您有所帮助。

本文标题为:php实现的AES加密类定义与用法示例

基础教程推荐