一组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读注册表
Oct 09 PHP
php根据日期判断星座的函数分享
Feb 13 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
PHP输出日历表代码实例
Mar 27 PHP
php类常量用法实例分析
Jul 09 PHP
简单介绍PHP的责任链编程模式
Aug 11 PHP
Linux系统下PHP-FPM的安装和配置教程
Aug 17 PHP
PHP Cookei记录用户历史浏览信息的代码
Feb 03 PHP
SSO单点登录的PHP实现方法(Laravel框架)
Mar 23 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 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执行速度全攻略(上)
2006/10/09 PHP
php 抽象类的简单应用
2011/09/06 PHP
php分页示例分享
2014/04/30 PHP
php修改指定文件后缀的方法
2014/09/11 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
2017/04/18 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python读取Android permission文件
2013/11/01 Python
Python实现八大排序算法
2016/08/13 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
python学习教程之使用py2exe打包
2017/09/24 Python
Django框架首页和登录页分离操作示例
2019/05/28 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
介绍下java.util.Arrays类
2012/10/16 面试题
2014年度安全生产目标管理责任书
2014/07/25 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
新教师个人工作总结
2015/02/06 职场文书
升职自我推荐信范文
2015/03/25 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
Go gorilla/sessions库安装使用
2022/08/14 Golang