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 相关文章推荐
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
Dec 11 PHP
PHP 编写大型网站问题集
May 07 PHP
一致性哈希算法以及其PHP实现详细解析
Aug 24 PHP
PHP与Java进行通信的实现方法
Oct 21 PHP
教你如何使用php session
Oct 28 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
Jul 29 PHP
WordPress中查询文章的循环Loop结构及用法分析
Dec 17 PHP
PHP实现冒泡排序的简单实例
May 26 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
thinkPHP框架实现生成条形码的方法示例
Jun 06 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 PHP
php json转换相关知识(小结)
Dec 21 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
浅析php与数据库代码开发规范
2013/08/08 PHP
PHP多进程编程实例
2014/10/15 PHP
Yii快速入门经典教程
2015/12/28 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
javascript 进度条 实现代码
2009/07/30 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
一波JavaScript日期判断脚本分享
2016/03/06 Javascript
jQuery实现的兼容性浮动层示例
2016/08/02 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
Python3简单实例计算同花的概率代码
2017/12/06 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
Python解决八皇后问题示例
2018/04/22 Python
python使用多进程的实例详解
2018/09/19 Python
python http基本验证方法
2018/12/26 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
python 如何对logging日志封装
2020/12/02 Python
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
党支部书记岗位责任制
2014/02/11 职场文书
2014年学校工作总结
2014/11/20 职场文书
地震慰问信
2015/02/14 职场文书
水知道答案观后感
2015/06/08 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
JavaScript组合继承详解
2021/11/07 Javascript