一组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 md5下16位和32位的实现代码
Apr 09 PHP
php 获取完整url地址
Dec 20 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
那些年一起学习的PHP(三)
Mar 22 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
浅析Yii2缓存的使用
May 10 PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 PHP
老生常谈文本文件和二进制文件的区别
Feb 27 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
Sep 17 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
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
咖啡语言
2021/03/03 咖啡文化
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
Laravel使用RabbitMQ的方法示例
2019/06/18 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
深入学习JavaScript中的原型prototype
2015/08/13 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
python实现端口转发器的方法
2015/03/13 Python
python中__call__内置函数用法实例
2015/06/04 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
Python如何重新加载模块
2020/07/29 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
英国足球店:UK Soccer Shop
2017/11/19 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
编程用JAVA解析XML的方式
2013/07/07 面试题
建筑专业自我鉴定
2013/10/22 职场文书
公司总经理工作职责管理办法
2014/02/28 职场文书
产品售后服务承诺书
2014/05/21 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
解除合同协议书范本
2016/03/21 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
Redis主从配置和底层实现原理解析(实战记录)
2021/06/30 Redis
Vue全局事件总线你了解吗
2022/02/24 Vue.js