一组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
UCenter Home二次开发指南
May 28 PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
Yii中CGridView关联表搜索排序方法实例详解
Dec 03 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 PHP
php使用Jpgraph创建折线图效果示例
Feb 15 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 PHP
PHP实现随机发放扑克牌
Apr 21 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
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
Javascript模块模式分析
2008/05/16 Javascript
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
Jquery遍历checkbox获取选中项value值的方法
2014/02/13 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
跟老齐学Python之编写类之三子类
2014/10/11 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
python flask实现分页效果
2017/06/27 Python
python如何生成网页验证码
2018/07/28 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
django2.0扩展用户字段示例
2019/02/13 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
触摸春天教学反思
2014/02/03 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
欢送会主持词
2015/07/01 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书
MySQL中的隐藏列的具体查看
2021/09/04 MySQL
python数据处理之Pandas类型转换
2022/04/28 Python