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文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
smarty巧妙处理iframe中内容页的代码
Mar 07 PHP
Linux下php5.4启动脚本
Aug 03 PHP
PHPer 需要了解的 5 个 Composer 小技巧
Aug 18 PHP
PHP实现生成唯一会员卡号
Aug 24 PHP
PHP5.3新特性小结
Feb 14 PHP
PHP文件操作实例总结
Sep 27 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 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分页显示制作详细讲解
2006/10/09 PHP
一个基于PDO的数据库操作类
2011/03/24 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
2015/04/27 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
让whoops帮我们告别ThinkPHP6的异常页面
2020/03/02 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
js读写(删除)Cookie实例详解
2013/04/17 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
python字符串编码识别模块chardet简单应用
2015/06/15 Python
详解Django中的form库的使用
2015/07/18 Python
Python脚本实时处理log文件的方法
2016/11/21 Python
python url 参数修改方法
2018/12/26 Python
Python GUI编程完整示例
2019/04/04 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
如何将字串String转换成整数int
2015/02/21 面试题
C语言基础笔试题
2013/04/27 面试题
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
JAVA招聘远程笔试题
2015/07/23 面试题
结构工程个人自荐信范文
2013/11/30 职场文书
绿色学校实施方案
2014/03/31 职场文书
贷款委托书范本
2014/04/08 职场文书
教师师德演讲稿
2014/05/06 职场文书
学校政风行风整改方案
2014/10/25 职场文书
党员个人年度总结
2015/02/14 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
离婚答辩状范文
2015/05/22 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python