一组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中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
PHP 地址栏信息的获取代码
Jan 07 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
PHP+MySQL投票系统的设计和实现分享
Sep 23 PHP
PHP设计模式之命令模式的深入解析
Jun 13 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
php实现的IMEI限制的短信验证码发送类
May 05 PHP
PHP发送短信代码分享
Aug 11 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
Dec 17 PHP
Zend Framework框架路由机制代码分析
Mar 22 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
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
php加密解密字符串示例
2016/10/13 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
js 图片等比例缩放代码
2010/05/13 Javascript
js常用排序实现代码
2010/12/28 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
2013/08/19 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
python中添加模块导入路径的方法
2021/02/03 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
安全生产责任书
2014/03/12 职场文书
营销与策划专业求职信
2014/06/20 职场文书
国际贸易系求职信
2014/08/09 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
办公用房租赁协议书
2014/11/29 职场文书
入党个人总结范文
2015/03/02 职场文书
信用卡工资证明范本
2015/06/19 职场文书
教师节感想
2015/08/11 职场文书