tp5.0
1.加密类库路径 \extend\aes\Aes.php
2.公共调用方法路径 \application\common.php; 加密方法encrypt;解密方法decrypt
3.控制器调用使用方法: 加密:encryp(‘字段’); 解密 decrypt(‘加密后字段’);
类库文件AES
<?php
namespace 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);
}
}
# 另一种解决解决JAVA 端加密使用了SHAIPRNG
/**
* 加密方法,对数据进行加密,返回加密后的数据
* @param string $data 要加密的数据
* @return string
* @注释:加密方法 处理JAVA端加密时使用了SHA1PRNG
*/
public function encrypt($data)
{
$data_key = substr(openssl_digest(openssl_digest($this->secret_key, 'sha1', true), 'sha1', true), 0, 16);
return openssl_encrypt($data, $this->method, $data_key, $this->options, $this->iv);
}
/**
* 解密方法,对数据进行解密,返回解密后的数据
* @param string $data 要解密的数据
* @return string
* @注释:加密方法 处理JAVA端加密时使用了SHA1PRNG
*/
public function decrypt($data)
{
$data_key = substr(openssl_digest(openssl_digest($this->secret_key, 'sha1', true), 'sha1', true), 0, 16);
return openssl_decrypt($data, $this->method, $data_key, $this->options, $this->iv);
}
公共调用类库 注:调用类库 use aes\Aes; 需在AES生成命名空间
/**
* [encrypt description]
* @Author:XuXianGang
* @Method:加密
* @DateTime:2022-08-11T09:51:30+0800
* @param string $value [description]
* @return [type] [description]
*/
function encrypt ($value='')
{
$aes = new Aes("xiangang"); // 该参数为key(加密参数值)
$encode = $aes->encrypt($value);
return $encode;
}
/**
* [decrypt description]
* @Author:XuXianGang
* @Method:解密
* @DateTime:2022-08-11T09:51:38+0800
* @param string $value [description]
* @return [type] [description]
*/
function decrypt ($value='')
{
$aes = new Aes("xiangang"); // 该参数为key(解密参数值)
$encode = $aes->decrypt($value);
return $encode;
}