aec加密 php_php aes加密解密类(兼容php5、php7)


Posted in PHP onMarch 14, 2021
/**

* @desc:php aes加密解密类

* @author [Lee] ]>

*/

class aes{
// 加密方式:1、mcrypt;2、openssl 默认1

private $type;

// cast-128 gost rijndael-128 twofish cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes arcfour

// AES-128-CBC AES-128-CFB AES-128-CFB1 AES-128-CFB8 AES-128-CTR AES-128-ECB AES-128-OFB AES-128-XTS AES-192-CBC AES-192-CFB AES-192-CFB1 AES-192-CFB8 AES-192-CTR AES-192-ECB AES-192-OFB AES-256-CBC AES-256-CFB AES-256-CFB1 AES-256-CFB8 AES-256-CTR AES-256-ECB AES-256-OFB AES-256-XTS BF-CBC BF-CFB BF-ECB BF-OFB CAMELLIA-128-CBC CAMELLIA-128-CFB CAMELLIA-128-CFB1 CAMELLIA-128-CFB8 CAMELLIA-128-ECB CAMELLIA-128-OFB CAMELLIA-192-CBC CAMELLIA-192-CFB CAMELLIA-192-CFB1 CAMELLIA-192-CFB8 CAMELLIA-192-ECB CAMELLIA-192-OFB CAMELLIA-256-CBC CAMELLIA-256-CFB CAMELLIA-256-CFB1 CAMELLIA-256-CFB8 CAMELLIA-256-ECB CAMELLIA-256-OFB CAST5-CBC CAST5-CFB CAST5-ECB CAST5-OFB DES-CBC DES-CFB DES-CFB1 DES-CFB8 DES-ECB DES-EDE DES-EDE-CBC DES-EDE-CFB DES-EDE-OFB DES-EDE3 DES-EDE3-CBC DES-EDE3-CFB DES-EDE3-CFB1 DES-EDE3-CFB8 DES-EDE3-OFB DES-OFB DESX-CBC GOST 28147-89 IDEA-CBC IDEA-CFB IDEA-ECB IDEA-OFB RC2-40-CBC RC2-64-CBC RC2-CBC RC2-CFB RC2-ECB RC2-OFB RC4 RC4-40 RC4-HMAC-MD5 SEED-CBC SEED-CFB SEED-ECB SEED-OFB aes-128-cbc aes-128-ccm aes-128-cfb aes-128-cfb1 aes-128-cfb8 aes-128-ctr aes-128-ecb aes-128-gcm aes-128-ofb aes-128-xts aes-192-cbc aes-192-ccm aes-192-cfb aes-192-cfb1 aes-192-cfb8 aes-192-ctr aes-192-ecb aes-192-gcm aes-192-ofb aes-256-cbc aes-256-ccm aes-256-cfb aes-256-cfb1 aes-256-cfb8 aes-256-ctr aes-256-ecb aes-256-gcm aes-256-ofb aes-256-xts bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc camellia-128-cfb camellia-128-cfb1 camellia-128-cfb8 camellia-128-ecb camellia-128-ofb camellia-192-cbc camellia-192-cfb camellia-192-cfb1 camellia-192-cfb8 camellia-192-ecb camellia-192-ofb camellia-256-cbc camellia-256-cfb camellia-256-cfb1 camellia-256-cfb8 camellia-256-ecb camellia-256-ofb cast5-cbc cast5-cfb cast5-ecb cast5-ofb des-cbc des-cfb des-cfb1 des-cfb8 des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-cfb1 des-ede3-cfb8 des-ede3-ofb des-ofb desx-cbc gost89 gost89-cnt id-aes128-CCM id-aes128-GCM id-aes128-wrap id-aes192-CCM id-aes192-GCM id-aes192-wrap id-aes256-CCM id-aes256-GCM id-aes256-wrap id-smime-alg-CMS3DESwrap idea-cbc idea-cfb idea-ecb idea-ofb rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 rc4-40 rc4-hmac-md5 seed-cbc seed-cfb seed-ecb seed-ofb

private $cipher = ‘seed-ofb‘;

// cbc cfb ctr ecb ncfb nofb ofb stream

private $mode = ‘stream‘;

private $iv;

// MCRYPT_RAND MCRYPT_DEV_RANDOM MCRYPT_DEV_URANDOM

private $source = MCRYPT_RAND;

private $key;

private $data;

/*

构造函数

@param key 密钥

@param type 加密类型:1、mcrypt;2、openssl

*/

public function __construct($key,$type = 1){
$this->key = $key;

$this->type = $type;

}

private function getiv(){
$cipher = $this->cipher;

$mode = $this->mode;

$source = $this->source;

$size = mcrypt_get_iv_size($cipher,$mode);

$iv = mcrypt_create_iv($size,$source);

return $iv;

}

public function encrypt($data){
$type = $this->type;

$cipher = $this->cipher;

$mode = $this->mode;

$key = $this->key;

if($type == 1){
$iv = $this->getiv();

$td = mcrypt_module_open($cipher, "", $mode, "");

mcrypt_generic_init($td, $key, $iv);

$encrypted = mcrypt_generic($td, $data);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

$ret = base64_encode($encrypted);

}else{
$encryption_key = base64_decode($key);

$len = openssl_cipher_iv_length($cipher);

$iv = openssl_random_pseudo_bytes($len);

$encrypted = openssl_encrypt($data, $cipher, $encryption_key, 0, $iv);

$ret = base64_encode($encrypted . ‘::‘ . $iv);

}

return $ret;

}

public function decrypt($data){
$type = $this->type;

$cipher = $this->cipher;

$mode = $this->mode;

$key = $this->key;

if($type == 1){
$iv = $this->getiv();

$td = mcrypt_module_open($cipher,"",$mode,"");

mcrypt_generic_init($td, $key, $iv);

$decode = base64_decode($data);

$dencrypted = mdecrypt_generic($td, $decode);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

$ret = $dencrypted;

}else{
$encryption_key = base64_decode($key);

$arr = explode(‘::‘, base64_decode($data));

$encrypted_data = $arr[0];

$iv = $arr[1];

$ret = openssl_decrypt($encrypted_data, $cipher, $encryption_key, 0, $iv);

}

return $ret;

}

}

// $key = ‘abcdefg‘;

// $data = ‘你好 world‘;

// $aes = new aes($key,2);

// $encode = $aes->encrypt($data);

// echo $encode.PHP_EOL;

// $decode = $aes->decrypt($encode);

// echo $decode.PHP_EOL;

 

PHP 相关文章推荐
留言板翻页的实现详解
Oct 09 PHP
PHP 5.3.0 安装分析心得
Aug 07 PHP
完美实现GIF动画缩略图的php代码
Jan 02 PHP
php获取当前时间的毫秒数的方法
Jan 26 PHP
PHP中模拟处理HTTP PUT请求的例子
Jul 22 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
PHP实现补齐关闭的HTML标签
Mar 22 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
php的4种常用运行方式详解
Dec 22 PHP
thinkPHP显示不出验证码的原因与解决方法分析
May 20 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
PHP 图片合成、仿微信群头像的方法示例
Oct 25 PHP
PHP配置文件php.ini中打开错误报告的设置方法
Jan 09 #PHP
imagettftext() 失效,不起作用
Mar 09 #PHP
PHP高并发和大流量解决方案整理
Mar 09 #PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
Mar 09 #PHP
PHP 出现 http500 错误的解决方法
Mar 09 #PHP
PHP 实现链式操作
Mar 09 #PHP
PHP中SESSION过期设置
Mar 09 #PHP
You might like
BBS(php & mysql)完整版(三)
2006/10/09 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
js玩一玩WSH吧
2007/02/23 Javascript
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
初学js 新节点的创建 删除 的步骤
2011/07/04 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
jquery动态赋值id与动态取id方法示例
2017/08/21 jQuery
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
vue实现登录拦截
2020/06/29 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python自定义异常实例详解
2017/07/11 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
Python远程linux执行命令实现
2020/11/11 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
深入浅出CSS3 background-clip,background-origin和border-image教程
2011/01/27 HTML / CSS
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
Yahoo-PHP面试题1
2016/07/20 面试题
如何执行一个shell程序
2012/11/23 面试题
洗发露广告词
2014/03/14 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
食品安全责任书范本
2015/05/09 职场文书
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang