一组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 选项及相关信息函数库
Dec 04 PHP
PHP 加密解密内部算法
Apr 22 PHP
php下尝试使用GraphicsMagick的缩略图功能
Jan 01 PHP
php设计模式 Strategy(策略模式)
Jun 26 PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
Feb 18 PHP
php实现将数组转换为XML的方法
Mar 09 PHP
PHP类型约束用法示例
Sep 28 PHP
PHP读取目录树的实现方法分析
Mar 22 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 PHP
aec加密 php_php aes加密解密类(兼容php5、php7)
Mar 14 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调用三种数据库的方法(2)
2006/10/09 PHP
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
深入浅析python 中的匿名函数
2018/05/21 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
python爬虫中多线程的使用详解
2019/09/23 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
python自动化实现登录获取图片验证码功能
2019/11/20 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
Java程序员面试题
2013/07/15 面试题
机械工程师求职自我评价
2013/09/23 职场文书
人力资源主管职责范本
2014/03/05 职场文书
十岁生日答谢词
2015/01/05 职场文书
圣诞晚会主持词
2015/07/01 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书