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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
用PHP实现小型站点广告管理(修正版)
Oct 09 PHP
PHP制作图型计数器的例子
Oct 09 PHP
深入PHP内存相关的功能特性详解
Jun 08 PHP
ThinkPHP模板替换与系统常量及应用实例教程
Aug 22 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
标准版Eclipse搭建PHP环境的详细步骤
Nov 18 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
PHP实现基于状态的责任链审批模式详解
May 31 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
终于听上了直流胆调频
2021/03/02 无线电
单点登录 Ucenter示例分析
2013/10/29 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
JavaScript使用Prototype实现面向对象的方法
2015/04/14 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
浅谈箭头函数写法在ReactJs中的使用
2017/08/22 Javascript
Vue中props的使用详解
2018/06/15 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
[46:00]Ti4 冒泡赛第二轮LGD vs C9 2
2014/07/14 DOTA
Python实现的三层BP神经网络算法示例
2018/02/07 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
Python实现的排列组合、破解密码算法示例
2019/04/12 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
护士进修自我鉴定
2014/02/07 职场文书
兴趣小组活动总结
2014/05/05 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
经费申请报告范文
2015/05/18 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
保护动物的宣传语
2015/07/13 职场文书