最近因为业务需求,需要使用加密数据进行接口请求,从而可以保证数据安全,起码不会那么明显,最终博主查找资料后,采用了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();
}
#处理逻辑
这样我们就实现了前端传过来的数据进行解密,并处理逻辑,这样可以防止恶意调我们的接口,或者请求参数暴露在外面。
更多文章请识别以下微信小程序二维码进行查看