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 不同编码下的字符串长度区分
Sep 26 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
php访问数组最后一个元素的函数end()用法
Mar 18 PHP
php使用GD库创建图片缩略图的方法
Jun 10 PHP
修复ShopNC使用QQ 互联时提示100010 错误
Nov 08 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
smarty学习笔记之常见代码段用法总结
Mar 19 PHP
php源码之将图片转化为data/base64数据流实例详解
Nov 27 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
Swoole4.4协程抢占式调度器详解
May 23 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 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
oracle资料库函式库
2006/10/09 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
webpack入门+react环境配置
2017/02/08 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
Python中的 enum 模块源码详析
2019/01/09 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
CSS3,线性渐变(linear-gradient)的使用总结
2017/01/09 HTML / CSS
英国钻石公司:British Diamond Company
2020/02/16 全球购物
酒店保安员岗位职责
2014/01/31 职场文书
小学教师评语大全
2014/04/23 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
信息技术研修心得体会
2016/01/08 职场文书