PHP加密解密类实例分析


Posted in PHP onApril 20, 2015

本文实例讲述了PHP加密解密类。分享给大家供大家参考。具体分析如下:

这段代码支持 数组加密 , 密文有效期, 各种对称加密

其中参数如下:

* @use ption::en($string, $key);
* @param String $string 需要加密的字串
* @param String $skey 密钥
* @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
* @return String

1. php代码如下:

/*
 * -工具库-加密解密码
*/
class ption
{
 private static $original = array('=', '+', '/');
 private static $later = array('O0O0O', 'o0O0o', 'oo00o');
 function __construct()
 {
 }
 private static function md5($skey = '')
 {
  $skey = $skey ? $skey : 'ui' ; //uicms::_config('security/authkey');
  return md5(substr($skey, 0, 16));
 }
 /**
 * @use ption::en($string, $key);
 * @param String $string 需要加密的字串
 * @param String $skey 密钥
 * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
 * @return String
 */
 static public function en($string = '', $skey = '', $expiry=0)
 {   
  if( is_array( $string ) )
  {
   $string = json_encode($string); // uicms::json($string, true, 'en');
  }     
  $string = str_pad($expiry ? $expiry + TIME : 0, 10, 0).$string;  
  $strArr = str_split(base64_encode($string));
  $strCount = count($strArr);  
  $skey = static::md5($skey);  
  foreach (str_split($skey) as $key => $value)
  {
   $key < $strCount && $strArr[$key].=$value;
  }
  return str_replace(self::$original, self::$later, join('', $strArr));
 }
 /**
 * @use ption::de($string, $key);
 * @param String $string 需要解密的字串
 * @param String $skey 密钥
 * @return String
 */
 static public function de($string = '', $skey = '')
 {   
  $strArr = str_split(str_replace(self::$later,self::$original,$string),2);
  $strCount = count($strArr);
  $skey = static::md5($skey);
  foreach (str_split($skey) as $key => $value)
  {
   $key < $strCount && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
  }   
  $result = base64_decode(join('', $strArr));
  if(substr($result, 0, 10) == 0 || substr($result, 0, 10) - TIME > 0)
  {
   return substr($result, 10);
  }
  else
  {
   return false;
  }   
 }  
}

2. 用法如下:

$str['username'] = 'oschina';
$str['pw'] = '123456';
$str['huoxin'] = '!@#$%^&';
echo "string : " . $str . " <br />";
echo "encode : " . ($enstring = ption::en($str)) . '<br />';
echo "decode : " . ption::de($enstring);

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
JAVA/JSP学习系列之六
Oct 09 PHP
Smarty的配置与高级缓存技术分享
Jun 05 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
Jun 07 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
php设计模式之命令模式的应用详解
May 21 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
Jul 08 PHP
php中mkdir()函数的权限问题分析
Sep 24 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
PHP学习记录之数组函数
Jun 01 PHP
php通过分类列表产生分类树数组的方法
Apr 20 #PHP
PHP统计数值数组中出现频率最多的10个数字的方法
Apr 20 #PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 #PHP
php获取本周星期一具体日期的方法
Apr 20 #PHP
php实现猴子选大王问题算法实例
Apr 20 #PHP
php递归删除指定文件夹的方法小结
Apr 20 #PHP
php动态生成缩略图并输出显示的方法
Apr 20 #PHP
You might like
西德产收音机
2021/03/01 无线电
php 常用字符串函数总结
2008/03/15 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
BootStrap制作导航条实例代码
2016/05/06 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
[01:31:03]DOTA2完美盛典全回顾 见证十五项大奖花落谁家
2017/11/28 DOTA
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
Python中optparse模块使用浅析
2015/01/01 Python
python3.x上post发送json数据
2018/03/04 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
支行行长竞聘报告
2014/11/06 职场文书
先进党员事迹材料
2014/12/24 职场文书
Ruby处理CSV数据方法详解
2022/04/18 Ruby