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 相关文章推荐
分页详解 从此分页无忧(PHP+mysql)
Nov 23 PHP
php str_pad 函数使用详解
Jan 13 PHP
使用PHP编写的SVN类
Jul 18 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
php实现转换ubb代码的方法
Jun 18 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
PHP单例模式详解及实例代码
Dec 21 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
PHP生成随机数的方法总结
Mar 01 PHP
yii框架使用分页的方法分析
Jul 25 PHP
浅谈php常用的7大框架的优缺点
Jul 20 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
截获网站title标签之家内容的例子
2006/10/09 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
jQuery 操作option的实现代码
2011/03/03 Javascript
js原型链原理看图说明
2012/07/07 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
AngularJS基础 ng-mousemove 指令简单示例
2016/08/02 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
Python import用法以及与from...import的区别
2015/05/28 Python
python针对excel的操作技巧
2018/03/13 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
python小白学习包管理器pip安装
2020/06/09 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
PHP面试题及答案二
2015/05/23 面试题
Unix里面如何在后台运行程序
2016/10/14 面试题
应届大学生自荐信格式
2013/09/21 职场文书
专科应届生求职信
2013/11/24 职场文书
工程业务员工作职责
2013/12/07 职场文书
公司周年庆典致辞
2015/07/30 职场文书
《为人民服务》教学反思
2016/02/20 职场文书