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 相关文章推荐
PHP模拟SQL Server的两个日期处理函数
Oct 09 PHP
php HtmlReplace输入过滤安全函数
Jul 03 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
php 删除一个数组中的某个值.兼容多维数组!
Feb 18 PHP
yii实现创建验证码实例解析
Jul 31 PHP
php实现格式化多行文本为Js可用格式
Apr 15 PHP
非常重要的php正则表达式详解
Jan 04 PHP
PHP引用返回用法示例
May 28 PHP
通过源码解析Laravel的依赖注入
Jan 22 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
Jun 22 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 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 魔术函数使用说明
2010/02/21 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
JS 对象介绍
2010/01/20 Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
2012/03/01 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
Vue性能优化的方法
2020/07/30 Javascript
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
在Python中处理XML的教程
2015/04/29 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
Python同时迭代多个序列的方法
2020/07/28 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
跟单文员的岗位职责
2013/11/14 职场文书
关于环保的广播稿
2015/12/17 职场文书
详解Vue的列表渲染
2021/11/20 Vue.js