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+DBM的同学录程序(3)
Oct 09 PHP
30 个很棒的PHP开源CMS内容管理系统小结
Oct 14 PHP
PHP数据流应用的一个简单实例
Sep 14 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
php实现的双向队列类实例
Sep 24 PHP
YII Framework框架教程之日志用法详解
Mar 14 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
搜索附近的人PHP实现代码
Feb 11 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
Jun 19 PHP
php 中htmlentities导致中文无法查询问题
Sep 10 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
德劲1104的电路分析与改良
2021/03/01 无线电
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
php实现ip白名单黑名单功能
2015/03/12 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
理解javascript对象继承
2016/04/17 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
利用python将xml文件解析成html文件的实现方法
2017/12/22 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
python opencv摄像头的简单应用
2019/06/06 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
建筑学推荐信
2013/11/03 职场文书
物流管理专业应届生求职信
2013/11/21 职场文书
平面设计岗位职责
2013/12/14 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
车辆工程专业求职信
2014/04/28 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
从原生JavaScript到React深入理解
2022/07/23 Javascript