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生成随机数或者字符串的代码
Sep 05 PHP
PHP 批量删除 sql语句
Jun 05 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
Codeigniter实现发送带附件的邮件
Mar 19 PHP
Smarty中的注释和截断功能介绍
Apr 09 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
Mar 01 PHP
php中引用符号(&amp;)的使用详细介绍
Dec 06 PHP
Thinkphp5.0自动生成模块及目录的方法详解
Apr 17 PHP
详细解读php的命名空间(一)
Feb 21 PHP
PHP时间函数使用详解
Mar 21 PHP
php提供实现反射的方法和实例代码
Sep 17 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 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编程网上资源导航
2006/10/09 PHP
php 注释规范
2012/03/29 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
Bootstrap图片轮播效果详解
2017/10/17 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
详解javascript对数组和json数组的操作
2019/04/15 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
Python中用Decorator来简化元编程的教程
2015/04/13 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
Python新手学习标准库模块命名
2020/05/29 Python
C#面试常见问题
2013/02/25 面试题
饲料采购员岗位职责
2013/12/19 职场文书
幼儿园大班开学教师寄语
2014/04/03 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书