一组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 编写的 25个游戏脚本
May 11 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
Aug 06 PHP
深入PHP FTP类的详解
Jun 13 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
Jun 21 PHP
PHP实现视频文件上传完整实例
Aug 28 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
PHP实现统计在线人数功能示例
Oct 15 PHP
thinkPHP模板中函数的使用方法示例
Nov 30 PHP
PHP并发查询MySQL的实例代码
Aug 09 PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 PHP
YII框架行为behaviors用法示例
Apr 26 PHP
php中的钩子理解及应用实例分析
Aug 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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
php下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
浅析php变量修饰符static的使用
2013/06/28 PHP
PHP生成唯一订单号
2015/07/05 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
jquery 回车事件实现代码
2011/08/23 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
跟老齐学Python之集合(set)
2014/09/24 Python
使用Python构建Hopfield网络的教程
2015/04/14 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
Python找出最小的K个数实例代码
2018/01/04 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
儿童python练习实例
2018/05/27 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
Python通过len函数返回对象长度
2020/10/22 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
厉行勤俭节约倡议书
2014/05/16 职场文书
学校运动会广播稿
2014/10/11 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书