一组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 相关文章推荐
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
Apr 07 PHP
php cookie使用方法学习笔记分享
Nov 07 PHP
php调整gif动画图片尺寸示例代码分享
Dec 05 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
php数组中删除元素之重新索引的方法
Sep 16 PHP
PHP、Java des加密解密实例
Apr 27 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 PHP
PHP常见漏洞攻击分析
Feb 21 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 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
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
php统计文章排行示例
2014/03/04 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
phpStudy 2016 使用教程详解(支持PHP7)
2017/10/18 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
面试常见的js算法题
2017/03/23 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
详解nodejs模板引擎制作
2017/06/14 NodeJs
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
Python及PyCharm下载与安装教程
2017/11/18 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
python装饰器原理与用法深入详解
2019/12/19 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
用python制作个视频下载器
2021/02/01 Python
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
初二物理教学反思
2014/01/29 职场文书
租房安全协议书
2014/08/20 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
粗暴解决CUDA out of memory的问题
2021/05/22 Python
vue判断按钮是否可以点击
2022/04/09 Vue.js