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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
PHP文本操作类
Nov 25 PHP
深入PHP中的HashTable结构详解
Jun 13 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
PHP的Socket网络编程入门指引
Aug 11 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
php cookie 详解使用实例
Nov 03 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
yii2 上传图片的示例代码
Nov 02 PHP
深入分析PHP设计模式
Jun 15 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类中Static方法效率测试代码
2010/10/17 PHP
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
Laravel监听数据库访问,打印SQL的例子
2019/10/24 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
js玩一玩WSH吧
2007/02/23 Javascript
jQuery学习笔记之Helloworld
2010/12/22 Javascript
javascript的内存管理详解
2013/08/07 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
Python中http请求方法库汇总
2016/01/06 Python
python读取二进制mnist实例详解
2017/05/31 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
数控专业大学生的自我鉴定
2013/11/13 职场文书
内业资料员岗位职责
2014/01/04 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
给校长的一封检讨书
2014/09/20 职场文书
捐款感谢信
2015/01/20 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server