php加密算法之实现可逆加密算法和解密分享


Posted in PHP onJanuary 21, 2014

加密算法如下:

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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
利用PHP实现与ASP Banner组件相似的类
Oct 09 PHP
超强分页类2.0发布,支持自定义风格,默认4种显示模式
Jan 02 PHP
MySQL 日期时间函数常用总结
Jun 12 PHP
php简单实现查询数据库返回json数据
Apr 16 PHP
详解PHP中的PDO类
Jul 06 PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
浅谈php和js中json的编码和解码
Oct 24 PHP
thinkPHP3.2.2框架行为扩展及demo示例
Jun 19 PHP
php扩展开发入门demo示例
Sep 23 PHP
PHP笛卡尔积实现原理及代码实例
Dec 09 PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 #PHP
php设计模式之单例模式使用示例
Jan 20 #PHP
php实现图形显示Ip地址的代码及注释
Jan 20 #PHP
php判断手机访问还是电脑访问示例分享
Jan 20 #PHP
利用中国天气预报接口实现简单天气预报
Jan 20 #PHP
php日历制作代码分享
Jan 20 #PHP
php使用qr生成二维码的示例分享
Jan 20 #PHP
You might like
php session 检测和注销
2009/03/16 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
2017/03/12 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
JavaScript prototype对象的属性说明
2010/03/13 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
仓库班组长岗位职责
2013/12/12 职场文书
董事长秘书工作职责
2014/06/10 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL