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 相关文章推荐
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
php之字符串变相相减的代码
Mar 19 PHP
PHP面向对象分析设计的经验原则
Sep 20 PHP
php 进度条实现代码
Mar 10 PHP
PHP中几个常用的魔术常量
Feb 23 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
thinkphp普通查询与表达式查询实例分析
Nov 24 PHP
php异常处理方法实例汇总
Jun 24 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
PHP实现链式操作的三种方法详解
Nov 16 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备份/还原MySQL数据库的代码
2011/01/06 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
Android interview questions
2016/12/25 面试题
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
学习型党组织心得体会
2014/09/12 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
学校节水倡议书
2015/04/29 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
Java版 单机五子棋
2022/05/04 Java/Android