一组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字符串处理的10个简单方法
Jun 30 PHP
php循环检测目录是否存在并创建(循环创建目录)
Jan 06 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 PHP
PHP 正则表达式常用函数
Aug 17 PHP
PHP统计目录大小的自定义函数分享
Nov 18 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
PHP二分查找算法示例【递归与非递归方法】
Sep 29 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 PHP
tp5框架内使用tp3.2分页的方法分析
May 05 PHP
PHP实现发送微博消息功能完整示例
Dec 04 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 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函数utf8转gb2312编码
2006/12/21 PHP
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Cpy和Python的效率对比
2015/03/20 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
Python SQLite3简介
2018/02/22 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
Python小进度条显示代码
2019/03/05 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
python tkinter控件布局项目实例
2019/11/04 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
工程造价自荐信
2013/10/09 职场文书
生产经理的自我评价分享
2013/11/07 职场文书
教师党员整改措施
2014/10/24 职场文书
优秀员工事迹材料
2014/12/20 职场文书
2014年个人年终总结
2015/03/09 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
python自动化测试通过日志3分钟定位bug
2021/11/20 Python