一组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 相关文章推荐
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
使用apache模块rewrite_module (转)
Feb 14 PHP
PHP 编程安全性小结
Jan 08 PHP
php学习笔记之 函数声明
Jun 09 PHP
解析MySql与Java的时间类型
Jun 22 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
Jul 10 PHP
php二维码生成以及下载实现
Sep 28 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 PHP
Yii 框架入口脚本示例分析
May 19 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 过滤器实现代码
2010/08/09 PHP
PHP中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2019/05/13 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
python发送邮件接收邮件示例分享
2014/01/21 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
简述数组与指针的区别
2014/01/02 面试题
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
2014年商场工作总结
2014/11/22 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
钢琴师观后感
2015/06/12 职场文书
答谢酒会主持词
2015/07/02 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
中学教代会开幕词
2016/03/04 职场文书
python之django路由和视图案例教程
2021/07/26 Python
Vue的过滤器你真了解吗
2022/02/24 Vue.js