php加密算法之实现可逆加密算法和解密分享


Posted in PHP onJanuary 21, 2014

加密算法如下:

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
php smarty的预保留变量总结
Dec 04 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
PHP与MySQL开发的8个技巧小结
Dec 17 PHP
PHP中使用TCPDF生成PDF文档实例
Jul 01 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
Dec 04 PHP
php检查是否是ajax请求的方法
Apr 16 PHP
PHP实现创建微信自定义菜单的方法示例
Jul 14 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
总结PHP内存释放以及垃圾回收
Mar 29 PHP
Yii2.0框架模型多表关联查询示例
Jul 18 PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 #PHP
php设计模式之单例模式使用示例
Jan 20 #PHP
php实现图形显示Ip地址的代码及注释
Jan 20 #PHP
php判断手机访问还是电脑访问示例分享
Jan 20 #PHP
利用中国天气预报接口实现简单天气预报
Jan 20 #PHP
php日历制作代码分享
Jan 20 #PHP
php使用qr生成二维码的示例分享
Jan 20 #PHP
You might like
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
python从入门到精通(DAY 3)
2015/12/20 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
世界上第一个创建了罩杯系统的美国内衣品牌:Maidenform
2019/03/23 全球购物
Yahoo-PHP面试题3
2012/01/14 面试题
编码实现字符串转整型的函数
2012/06/02 面试题
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
2014全国两会心得体会
2014/03/17 职场文书
施工单位安全责任书
2014/07/24 职场文书
2015年仓库工作总结
2015/04/09 职场文书
大队委员竞选稿
2015/11/20 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
2019年学校消防安全责任书(2篇)
2019/10/09 职场文书
Vue Element plus使用方法梳理
2022/12/24 Vue.js