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 相关文章推荐
Access数据库导入Mysql的方法之一
Oct 09 PHP
PHP产生随机字符串函数
Dec 06 PHP
php 移除数组重复元素的一点说明
Nov 27 PHP
PHP往XML中添加节点的方法
Mar 12 PHP
php利用反射实现插件机制的方法
Mar 14 PHP
PHP编写RESTful接口
Feb 23 PHP
一段实用的php验证码函数
May 19 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
Mar 24 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 PHP
PHP7内核CGI与FastCGI详解
Apr 14 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
用Socket发送电子邮件
2006/10/09 PHP
一个简单且很好用的php分页类
2013/10/26 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
IE6 fixed的完美解决方案
2011/03/31 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
vue的keep-alive中使用EventBus的方法
2019/04/23 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
vue实现分页加载效果
2019/12/24 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
Python Pillow Image Invert
2019/01/22 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
介绍一下Java的事务处理
2012/12/07 面试题
中间件的定义
2016/08/09 面试题
护理职业应聘自荐书
2013/09/29 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
企业介绍信范文
2015/01/30 职场文书
Python中else的三种使用场景
2021/06/16 Python
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS