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 相关文章推荐
一个简单实现多条件查询的例子
Oct 09 PHP
php写的简易聊天室代码
Jun 04 PHP
PHP中获取文件扩展名的N种方法小结
Feb 27 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
php mongodb操作类 带几个简单的例子
Aug 25 PHP
浅谈php中curl、fsockopen的应用
Dec 10 PHP
php实现数据库的增删改查
Feb 26 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 PHP
Swoole4.4协程抢占式调度器详解
May 23 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
Jan 04 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 include_path设置技巧分享
2011/07/03 PHP
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
Jquery常用技巧收集整理篇
2010/11/14 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
js表单验证实例讲解
2016/03/31 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
浅析vue插槽和作用域插槽的理解
2019/04/22 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
python爬取哈尔滨天气信息
2018/07/14 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
python中uuid模块实例浅析
2020/12/29 Python
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
建筑专业自荐信
2013/10/18 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
初二英语教学反思
2016/02/15 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python