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 zlib压缩和解压缩swf文件的代码
Dec 30 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
Jun 24 PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 PHP
php中的filesystem文件系统函数介绍及使用示例
Feb 13 PHP
php使用ob_start()实现图片存入变量的方法
Nov 14 PHP
PHP实现的浏览器检查类
Apr 11 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
Dec 25 PHP
php获取文件名称和扩展名的方法
Feb 07 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
Apr 03 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
PHP命令行与定时任务
Apr 01 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
如何对PHP程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
PHP一些有意思的小区别
2006/12/06 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
javascript 二进制运算技巧解析
2012/11/27 Javascript
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
Python遍历目录的4种方法实例介绍
2015/04/13 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
python中退出多层循环的方法
2018/11/27 Python
python 如何区分return和yield
2020/09/22 Python
安装pyinstaller遇到的各种问题(小结)
2020/11/20 Python
python 下载文件的几种方法汇总
2021/01/06 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
支部组织生活会方案
2014/06/10 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
追悼会答谢词
2015/01/05 职场文书
八年级英语教学计划
2015/01/23 职场文书
详解JS数组方法
2021/11/20 Javascript
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript