一组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+MySQL5.0中文乱码解决方法
Nov 20 PHP
使用php显示搜索引擎来的关键词
Feb 13 PHP
php伪静态之APACHE篇
Jun 02 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
PHP Reflection API详解
May 12 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 PHP
yii2中dropDownList实现二级和三级联动写法
Apr 26 PHP
thinkPHP5 tablib标签库自定义方法详解
May 10 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
php遍历目录下文件并按修改时间排序操作示例
Jul 12 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
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
JavaScript 数组运用实现代码
2010/04/13 Javascript
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
python学生信息管理系统(初级版)
2018/10/17 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
澳大利亚商务邀请函
2014/01/17 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
旅游文化节策划方案
2014/06/06 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js