PHP
PHP使用AES加密和解密
PHP使用AES对数据进行加密和解密
最近因为业务需求,需要使用加密数据进行接口请求,从而可以保证数据安全,起码不会那么明显,最终博主查找资料后,采用了AES加密,下面就是分享整个加密解密的流程,首页是自己封装的一个类库,代码如下:
namespace ClassPHP\Aes; class Aes { /** * var string $method 加解密方法,可通过openssl_get_cipher_methods()获得 */ protected $method; /** * var string $secret_key 加解密的密钥 */ protected $secret_key; /** * var string $iv 加解密的向量,有些方法需要设置比如CBC */ protected $iv; /** * var string $options (不知道怎么解释,目前设置为0没什么问题) */ protected $options; /** * 构造函数 * * @param string $key 密钥 * @param string $method 加密方式 * @param string $iv iv向量 * @param mixed $options 还不是很清楚 * */ public function __construct($key, $method = 'AES-128-ECB', $iv = '', $options = 0) { // key是必须要设置的 $this->secret_key = isset($key) ? $key : 'morefun'; $this->method = $method; $this->iv = $iv; $this->options = $options; } /** * 加密方法,对数据进行加密,返回加密后的数据 * * @param string $data 要加密的数据 * * @return string * */ public function encrypt($data) { return openssl_encrypt($data, $this->method, $this->secret_key, $this->options, $this->iv); } /** * 解密方法,对数据进行解密,返回解密后的数据 * * @param string $data 要解密的数据 * * @return string * */ public function decrypt($data) { return openssl_decrypt($data, $this->method, $this->secret_key, $this->options, $this->iv); } }
然后就是我们写的一个公共配置文件,专门用来进行加解密的,代码如下:
#引入加密类库 require 'ClassPHP/Aes.php'; use ClassPHP\Aes\Aes; /** * 解密数据 * @param $data * @return mixed|string */ function decryptData($data) { #密钥信息 $key = "16位密钥"; //密钥 $iv = "16位偏移量"; //偏移量 #初始化类 $aes = new Aes($key, 'AES-128-CBC', $iv); //解密 $decrypted = $aes->decrypt($data); //判断是否为空 if (empty($decrypted)) { return ""; } //json转数组 $result = json_decode($decrypted, true); //返回 return $result; } /** * 加密数据 * @param $data * @return mixed */ function encryptData($data) { #密钥信息 $key = "16位密钥"; //密钥 $iv = "16位偏移量"; //偏移量 #初始化类 $aes = new Aes($key, 'AES-128-CBC', $iv); $encrypted = $aes->encrypt($data); return $encrypted; }
下面是我们的业务引用逻辑,代码如下:
#引入公告配置 require __DIR__ . "/aseComm.php"; #获取用户加密数据 $request = $_POST["request"]; if (!isset($request) || empty($request)) { echo "参数获取失败"; exit(); } #解密数据 $requestParams = decryptData($request); #判断是否正确 if (!isset($requestParams["uid"])) { echo "非法请求"; exit(); } #处理逻辑
这样我们就实现了前端传过来的数据进行解密,并处理逻辑,这样可以防止恶意调我们的接口,或者请求参数暴露在外面。
0条评论