php实现的三个常用加密解密功能函数示例


Posted in PHP onNovember 06, 2017

本文实例讲述了php实现的三个常用加密解密功能函数。分享给大家供大家参考,具体如下:

算法一:

//加密函数
function lock_url($txt,$key='3water.com')
{
  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
  $nh = rand(0,64);
  $ch = $chars[$nh];
  $mdKey = md5($key.$ch);
  $mdKey = substr($mdKey,$nh%8, $nh%8+7);
  $txt = base64_encode($txt);
  $tmp = '';
  $i=0;$j=0;$k = 0;
  for ($i=0; $i<strlen($txt); $i++) {
    $k = $k == strlen($mdKey) ? 0 : $k;
    $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64;
    $tmp .= $chars[$j];
  }
  return urlencode($ch.$tmp);
}
//解密函数
function unlock_url($txt,$key='3water.com')
{
  $txt = urldecode($txt);
  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
  $ch = $txt[0];
  $nh = strpos($chars,$ch);
  $mdKey = md5($key.$ch);
  $mdKey = substr($mdKey,$nh%8, $nh%8+7);
  $txt = substr($txt,1);
  $tmp = '';
  $i=0;$j=0; $k = 0;
  for ($i=0; $i<strlen($txt); $i++) {
    $k = $k == strlen($mdKey) ? 0 : $k;
    $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);
    while ($j<0) $j+=64;
    $tmp .= $chars[$j];
  }
  return base64_decode($tmp);
}

用法:

$str="三水点靠木";
$pwd = lock_url($str);
echo "加密之后:".$pwd."<br/>";
echo "解密还原:".unlock_url($pwd);

运行结果:

php实现的三个常用加密解密功能函数示例

算法二:

<?php
function passport_encrypt($txt, $key = '3water.com') 
{ 
  srand((double)microtime() * 1000000); 
  $encrypt_key = md5(rand(0, 32000)); 
  $ctr = 0; 
  $tmp = ''; 
  for($i = 0;$i < strlen($txt); $i++) { 
  $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; 
  $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]); 
  } 
  return urlencode(base64_encode(passport_key($tmp, $key))); 
} 
function passport_decrypt($txt, $key = '3water.com') 
{ 
  $txt = passport_key(base64_decode(urldecode($txt)), $key); 
  $tmp = ''; 
  for($i = 0;$i < strlen($txt); $i++) { 
  $md5 = $txt[$i]; 
  $tmp .= $txt[++$i] ^ $md5; 
  } 
  return $tmp; 
} 
function passport_key($txt, $encrypt_key) 
{ 
  $encrypt_key = md5($encrypt_key); 
  $ctr = 0; 
  $tmp = ''; 
  for($i = 0; $i < strlen($txt); $i++) { 
  $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; 
  $tmp .= $txt[$i] ^ $encrypt_key[$ctr++]; 
  } 
  return $tmp; 
} 
?>

用法:

<?php
$txt = "1";
$key = "testkey";
$encrypt = passport_encrypt($txt,$key);
$decrypt = passport_decrypt($encrypt,$key);
echo $encrypt."<br>";
echo $decrypt."<br>";
?>

运行结果:

php实现的三个常用加密解密功能函数示例

算法三(改进第一个加密之后的算法)

//加密函数
function lock_url($txt,$key='3water.com')
{
  $txt = $txt.$key;
  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
  $nh = rand(0,64);
  $ch = $chars[$nh];
  $mdKey = md5($key.$ch);
  $mdKey = substr($mdKey,$nh%8, $nh%8+7);
  $txt = base64_encode($txt);
  $tmp = '';
  $i=0;$j=0;$k = 0;
  for ($i=0; $i<strlen($txt); $i++) {
    $k = $k == strlen($mdKey) ? 0 : $k;
    $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64;
    $tmp .= $chars[$j];
  }
  return urlencode(base64_encode($ch.$tmp));
}
//解密函数
function unlock_url($txt,$key='3water.com')
{
  $txt = base64_decode(urldecode($txt));
  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
  $ch = $txt[0];
  $nh = strpos($chars,$ch);
  $mdKey = md5($key.$ch);
  $mdKey = substr($mdKey,$nh%8, $nh%8+7);
  $txt = substr($txt,1);
  $tmp = '';
  $i=0;$j=0; $k = 0;
  for ($i=0; $i<strlen($txt); $i++) {
    $k = $k == strlen($mdKey) ? 0 : $k;
    $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);
    while ($j<0) $j+=64;
    $tmp .= $chars[$j];
  }
  return trim(base64_decode($tmp),$key);
}

用法:

$str="三水点靠木";
$pwd = lock_url($str);
echo "加密之后:".$pwd."<br/>";
echo "解密还原:".unlock_url($pwd);

运行结果:

php实现的三个常用加密解密功能函数示例

PHP 相关文章推荐
PHP版国家代码、缩写查询函数代码
Aug 14 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
Jun 03 PHP
深入php define()函数以及defined()函数的用法详解
Jun 05 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
php下获取http状态的实现代码
May 09 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 PHP
win7系统配置php+Apache+mysql环境的方法
Aug 21 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
php进行ip地址掩码运算处理的方法
Jul 11 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
老生常谈PHP面向对象之注册表模式
May 26 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
Nov 06 #PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 #PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 #PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 #PHP
php实现的生成迷宫与迷宫寻址算法完整实例
Nov 06 #PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 #PHP
PHP中危险的file_put_contents函数详解
Nov 04 #PHP
You might like
php银联网页支付实现方法
2015/03/04 PHP
关于php开启错误提示的总结
2019/09/24 PHP
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
js实现表单检测及表单提示的方法
2015/08/14 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
js实现数字滚动特效
2019/12/16 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
关于python3中setup.py小概念解析
2019/08/22 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
python+selenium+PhantomJS抓取网页动态加载内容
2020/02/25 Python
python drf各类组件的用法和作用
2021/01/12 Python
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
一些Solaris面试题
2015/12/22 面试题
优秀学生干部个人的自我评价
2013/10/04 职场文书
工程造价自荐信
2013/10/09 职场文书
员工自我鉴定
2013/10/09 职场文书
司法建议书范文
2014/05/13 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
任命书怎么写
2015/03/02 职场文书
集结号观后感
2015/06/08 职场文书
大学生暑假实习总结
2015/07/13 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript