一组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-MySQL教程归纳总结
Jun 07 PHP
CURL状态码列表(详细)
Jun 27 PHP
php调用MySQL存储过程的方法集合(推荐)
Jul 03 PHP
PHP针对JSON操作实例分析
Jan 12 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
PHP响应post请求上传文件的方法
Dec 17 PHP
详解js异步文件加载器
Jan 24 PHP
PHP 5.6.11中CURL模块问题的解决方法
Aug 08 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
PHP将整数数字转换为罗马数字实例分享
Mar 17 PHP
PHP7.3.10编译安装教程
Oct 08 PHP
laravel添加前台跳转成功页面示例
Oct 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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
投票管理程序
2006/10/09 PHP
php获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
使用js+jquery实现无限极联动
2013/05/23 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
JavaScript订单操作小程序完整版
2017/06/23 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
python中@contextmanager实例用法
2021/02/07 Python
python模块内置属性概念及实例
2021/02/18 Python
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
如何通过jdbc调用存储过程
2012/04/19 面试题
高中生的学习总结自我鉴定
2013/10/26 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
老人再婚离婚协议书范本
2014/10/27 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python