对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
简单通俗来说就是:加密出来的秘钥,可以被解密出来,这种加密方式就被称为“对称加密”
AES加密算法
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。现在,高级加密标准已然成为对称密钥加密中最流行的算法之一。---摘自(维基百科)
PHP的OpenSSL扩展已经实现了AES加密算法,我们可以通过OpenSSL扩展提供的方法实现对数据的加密和解密,PHP在7.2版本已经完全移除了MCrypt加密,PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt。
PHP AES的实现
<?php
class Aes
{
/**
* var string $method 加解密方法
*/
protected $method;
/**
* var string $secret_key 加解密的密钥
*/
protected $secret_key;
/**
* var string $iv 加解密的向量
*/
protected $iv;
/**
* var int $options
*/
protected $options;
/**
* 构造函数
* @param string $key 密钥
* @param string $method 加密方式
* @param string $iv 向量
* @param int $options
*/
public function __construct($key = '', $iv = '', $method = 'AES-128-CBC', $options = OPENSSL_RAW_DATA)
{
$this->secret_key = isset($key) ? $key : 'b49b38ae0a13e02d';
$this->method = in_array($method, openssl_get_cipher_methods()) ? $method : 'AES-128-CBC';
$this->iv = $iv;
$this->options = in_array($options, [OPENSSL_RAW_DATA, OPENSSL_ZERO_PADDING]) ? $options : OPENSSL_RAW_DATA;
}
/**
* 加密
* @param string $data 加密的数据
* @return string
*/
public function encrypt($data = '')
{
return base64_encode(openssl_encrypt($data, $this->method, $this->secret_key, $this->options, $this->iv));
}
/**
* 解密
* @param string $data 解密的数据
* @return string
*/
public function decrypt($data = '')
{
return openssl_decrypt(base64_decode($data), $this->method, $this->secret_key, $this->options, $this->iv);
}
}
//调用示例:
$aes = new Aes(); //构造方法要不要传入第二个参数看个人需求,不传也不会报错,但是可能会报warning警告
$res = $aes->encrypt('190ql98ty周董1aQm~啊哈哈!@#$%^&*()_+\./[];');
echo $res; //加密后的内容
//将上面加密后的内容进行解密
print_r($aes->decrypt($res)); //输出:190ql98ty周董1aQm~啊哈哈!@#$%^&*()_+\./[];本文结束。
声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。


精彩评论