一组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 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 PHP
php简单实现查询数据库返回json数据
Apr 16 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
php实现比较全的数据库操作类
Jun 18 PHP
YII2.0之Activeform表单组件用法实例
Jan 09 PHP
php版微信js-sdk支付接口类用法示例
Oct 12 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
Aug 25 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 PHP
PHP 对象接口简单实现方法示例
Apr 13 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页面间传递参数实例代码
2008/06/05 PHP
php的curl实现get和post的代码
2008/08/23 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
Yii中表单用法实例详解
2016/01/05 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
javascript引用对象的方法
2007/01/11 Javascript
js jquery做的图片连续滚动代码
2008/01/06 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
解决layer弹出层中表单不起作用的问题
2019/09/09 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
python原始套接字编程示例分享
2014/02/21 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
python 字符串常用方法汇总详解
2019/09/16 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
大学生怎样写好自荐信
2014/02/25 职场文书
婚礼主持词
2014/03/13 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
个人自查自纠材料
2014/10/14 职场文书
民主生活会主持词
2015/07/01 职场文书
离职告别感言
2015/08/04 职场文书
Python基础教程,Python入门教程(超详细)
2021/06/24 Python