php加密解密实用类分享


Posted in PHP onJanuary 07, 2014

用户注册的密码一般不会明文保存,总得加个密先。最简单的当然是在数据库sql语句中调用md5函数加密用户密码。这里介绍一个加解密类。如果你想在用户忘记密码时为他或她找回原来的密码,那么这个类是个好用的工具。当然,这个加解密类也可用于其他用途。

<?phpclass crypt {
    private $skey;
    public function __construct($key) {
        $this->skey = hash("md5", $key, true); //32位skey
    }
    public function safe_b64encode($string) {
        $data = base64_encode($string);
        $data = str_replace(array('+', '/', '='), array('-', '_', ''), $data);
        return $data;
    }
    public function safe_b64decode($string) {
        $data = str_replace(array('-', '_'), array('+', '/'), $string);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
            $data .= substr('====', $mod4);
        }
        return base64_decode($data);
    }
    public function encode($value) {
        if (!$value) {
            return false;
        }
        $text = $value;
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->skey, $text, MCRYPT_MODE_ECB, $iv);
        return trim($this->safe_b64encode($crypttext));
    }
    public function decode($value) {
        if (!$value) {
            return false;
        }
        $crypttext = $this->safe_b64decode($value);
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $this->skey, $crypttext, MCRYPT_MODE_ECB, $iv);
        return trim($decrypttext);
    }
}
PHP 相关文章推荐
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
PHP中函数内引用全局变量的方法
Oct 20 PHP
PHP三层结构(上) 简单三层结构
Jul 04 PHP
利用PHP+JS实现搜索自动提示(实例)
Jun 09 PHP
php实现水仙花数示例分享
Apr 03 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
Oct 18 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
Jan 07 #PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 #PHP
PHP实现变色验证码实例
Jan 06 #PHP
有关于PHP中常见数据类型的汇总分享
Jan 06 #PHP
用php简单实现加减乘除计算器
Jan 06 #PHP
PHP面向对象之旅:深入理解static变量与方法
Jan 06 #PHP
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 #PHP
You might like
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
php连接mysql数据库代码
2009/03/10 PHP
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
nodejs服务搭建教程 nodejs访问本地站点文件
2017/04/07 NodeJs
Vue 使用中的小技巧
2018/04/26 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
Python 基础教程之str和repr的详解
2017/08/20 Python
Python 元类实例解析
2018/04/04 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
班级活动策划书
2014/02/06 职场文书
十佳护士先进事迹
2014/05/08 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
Java基础-封装和继承
2021/07/02 Java/Android
SQL语句多表联合查询的方法示例
2022/04/18 MySQL