一组PHP可逆加密解密算法实例代码


Posted in PHP onJanuary 21, 2014

对于大部分密码加密,我们可以采用md5、sha1等方法。可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密。

对于需要还原的信息,则需要采用可逆的加密解密算法。

下面一组PHP函数是实现此加密解密的方法:

加密算法如下:

function encrypt($data, $key)
{
 $key = md5($key);
    $x  = 0;
    $len = strlen($data);
    $l  = strlen($key);
    for ($i = 0; $i < $len; $i++)
    {
        if ($x == $l) 
        {
         $x = 0;
        }
        $char .= $key{$x};
        $x++;
    }
    for ($i = 0; $i < $len; $i++)
    {
        $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
    }
    return base64_encode($str);
}

解密算法如下:
function decrypt($data, $key)
{
 $key = md5($key);
    $x = 0;
    $data = base64_decode($data);
    $len = strlen($data);
    $l = strlen($key);
    for ($i = 0; $i < $len; $i++)
    {
        if ($x == $l) 
        {
         $x = 0;
        }
        $char .= substr($key, $x, 1);
        $x++;
    }
    for ($i = 0; $i < $len; $i++)
    {
        if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1)))
        {
            $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
        }
        else
        {
            $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
        }
    }
    return $str;
}

上述加密解密的过程均需要用到一个加密密钥(即参数$key)。
$data = 'PHP加密解密算法';  // 被加密信息
$key = '123';     // 密钥
$encrypt = encrypt($data, $key);
$decrypt = decrypt($encrypt, $key);
echo $encrypt, "\n", $decrypt;

上述将输出类似如下结果:

gniCSOzZG+HnS9zcFea7SefNGhXF
PHP加密解密算法

从上述结果可以看出,这是一组可逆的加密解密算法,可以用于部分需要还原的数据加密。

PHP 相关文章推荐
相对路径转化成绝对路径
Apr 10 PHP
php教程之phpize使用方法
Feb 12 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
Mar 02 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
Mar 21 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
PHP简单读取PDF页数的实现方法
Jul 21 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 PHP
discuz加密解密函数使用方法和中文注释
Jan 21 #PHP
php加密算法之实现可逆加密算法和解密分享
Jan 21 #PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 #PHP
php设计模式之单例模式使用示例
Jan 20 #PHP
php实现图形显示Ip地址的代码及注释
Jan 20 #PHP
php判断手机访问还是电脑访问示例分享
Jan 20 #PHP
利用中国天气预报接口实现简单天气预报
Jan 20 #PHP
You might like
PHP小教程之实现双向链表
2014/06/12 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
JavaScript 异步调用框架 (Part 1 - 问题 &amp; 场景)
2009/08/03 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
JavaScript实现获取某个元素相邻兄弟节点的prev与next方法
2016/01/25 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
Vue-cropper 图片裁剪的基本原理及思路讲解
2018/04/17 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
浅析Python中将单词首字母大写的capitalize()方法
2015/05/18 Python
Python随机读取文件实现实例
2017/05/25 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
python用户管理系统的实例讲解
2017/12/23 Python
Python实现模拟浏览器请求及会话保持操作示例
2018/07/30 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
django框架模板中定义变量(set variable in django template)的方法分析
2019/06/24 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
关于感恩的演讲稿200字
2014/08/26 职场文书
离职证明标准格式
2014/09/15 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
行政文员岗位职责
2015/02/04 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
物业公司管理制度
2015/08/05 职场文书
如何Tomcat中使用ipv6地址
2022/05/06 Servers