一组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 相关文章推荐
PHPLog php 程序调试追踪工具
Sep 09 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
php通过exif_read_data函数获取图片的exif信息
May 21 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
php数据序列化测试实例详解
Aug 12 PHP
PHP实现的ID混淆算法类与用法示例
Aug 10 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
Oct 30 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
用php如何解决大文件分片上传问题
Jul 07 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
如何做到多笔资料的同步
2006/10/09 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
2013/05/17 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
JS回调函数基本定义与用法实例分析
2017/05/24 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
Python中的类与对象之描述符详解
2015/03/27 Python
python+opencv识别图片中的圆形
2020/03/25 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
python开启debug模式的方法
2019/06/27 Python
Django框架基础模板标签与filter使用方法详解
2019/07/23 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
python中selenium库的基本使用详解
2020/07/31 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
宣传稿格式范文
2015/07/23 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
基于Python实现的购物商城管理系统
2021/04/27 Python
在Django中使用MQTT的方法
2021/05/10 Python
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android
阿里云k8s服务升级时502错误 springboot项目应用
2022/04/09 Servers