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 相关文章推荐
PHP实现Socket服务器的代码
Apr 03 PHP
php zend解密软件绿色版测试可用
Apr 14 PHP
在PHP中操作Excel实例代码
Apr 29 PHP
php设计模式 Strategy(策略模式)
Jun 26 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
php牛逼的面试题分享
Jan 18 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
wamp安装后自定义配置的方法
Aug 23 PHP
php强制用户转向www域名的方法
Jun 19 PHP
PHP实现的下载远程文件类定义与用法示例
Jul 05 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 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支持断点续传的源码
2010/05/16 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
PHP编程风格规范分享
2014/01/15 PHP
PHP发送短信代码分享
2015/08/11 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
python算法学习之计数排序实例
2013/12/18 Python
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
澳大利亚和新西兰最大的在线旅行社之一:Aunt Betty
2019/08/07 全球购物
华为C++笔试题
2014/08/05 面试题
毕业生在校学习的自我评价分享
2013/10/08 职场文书
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
2014年大学生四年规划书范文
2014/04/03 职场文书
抗震救灾标语
2014/06/26 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
早读课迟到检讨书
2014/09/25 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
2016年心理学教育培训学习心得体会
2016/01/12 职场文书
介绍一下28个JS常用数组方法
2022/05/06 Javascript