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初学者头痛的十四个问题
Jul 12 PHP
基于PHP与XML的PDF文档生成技术
Oct 09 PHP
PHP4之COOKIE支持详解
Oct 09 PHP
简单的页面缓冲技术
Oct 09 PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
php调用shell的方法
Nov 05 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 PHP
使用PHPMailer发送邮件实例
Feb 15 PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
Jul 26 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 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
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
php+mysql实现无限级分类
2015/11/11 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
2011/03/25 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
tab栏切换原理
2017/03/22 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
Python实现抓取网页并且解析的实例
2014/09/20 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
工业自动化专业自荐信范文
2014/04/10 职场文书
党风廉政建设责任书
2014/04/14 职场文书
财务负责人任命书
2014/06/06 职场文书
员工安全责任书范本
2014/07/24 职场文书
公务员政审材料范文
2014/12/23 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
Python时间操作之pytz模块使用详解
2022/06/14 Python