下面我将详细讲解“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加密类定义与用法示例 - Python技术站