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 相关文章推荐
vBulletin Forum 2.3.xx SQL Injection
Oct 09 PHP
如何限制访问者的ip(PHPBB的代码)
Oct 09 PHP
PHP编程与应用
Oct 09 PHP
15种PHP Encoder的比较
Apr 17 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
PHP仿微信发红包领红包效果
Oct 30 PHP
PHP使用文件锁解决高并发问题示例
Mar 29 PHP
在 Laravel 中动态隐藏 API 字段的方法
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
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
php单文件版在线代码编辑器
2015/03/12 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
php依赖注入知识点详解
2019/09/23 PHP
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
原生JS实现 MUI导航栏透明渐变效果
2017/11/07 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
python web框架学习笔记
2016/05/03 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
css3实现可滑动跳转的分页插件示例
2014/05/08 HTML / CSS
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
一道Delphi上机题
2012/06/04 面试题
资深生产主管自我评价
2013/09/22 职场文书
入党综合考察材料
2014/06/02 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
化工厂员工工作总结
2015/10/15 职场文书
2016高考寄语集锦
2015/12/04 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书