WebQQ网页hash加密算法PHP版
由于最近QQ垃圾信息群发严重,官方选择将WebQQ部分功能实现细节方面做了点手脚。其中获取好友的POST值多了一个hash参数。
这个hash是在js里加密完成的。
以下是js源码
代码如下 | 复制代码 |
<script type="text/javascript"> |
转成PHP版本处理,源码如下
代码如下 | 复制代码 |
<?php /** * 获取好友时的POST参数Hash算法 * * public * @param string $qq qq号 * @param string $ptwebqq cookies中的ptwebqq * @return string */ function get_hash($qq, $ptwebqq) { for ($a = $ptwebqq . "password error", $s = "", $j = array();;) { if (strlen($s) <= strlen($a)) { $s .= $qq; if ($s == strlen($a)) break; } else { $s = substr($s, 0, strlen($a)); break; } } for ($d = 0; $d < strlen($s); $d++) { $j[$d] = uniord(substr($s,$d)) ^ uniord(substr($a,$d)); } $a = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"); $s = ""; for ($d = 0; $d < count($j); $d++) { $s .= $a[$j[$d] >> 4 & 15]; $s .= $a[$j[$d] & 15]; } return $s; } /** * 模拟 JavaScript charCodeAt函数 * * protected * @param string $str * @return int */ function uniord($str) { list(, $ord) = unpack('N', mb_convert_encoding($str, 'UCS-4BE', 'UTF-8')); return |
$ord;
}
/* End of file commons.php */
PHP5.3的VC9、VC6、Thread Safe、Non Thread Safe的区别
PHP一共给了四个版本,VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe,这让我这个菜鸟头疼啊,还好 PHP 官网提供下载的地方左边有个英文 choose 我看懂了,我估摸着就是如何来选择版本的意思吧,于是开始查字典及上网查找,终于看明白了具体意思,拿来做个备忘先。
一、如何选择 PHP5.3 的 VC9 版本和 VC6 版本
VC6 版本是使用 Visual Studio 6 编译器编译的,如果你的 PHP 是用 Apache 来架设的,那你就选择 VC6 版本。
VC9 版本是使用 Visual Studio 2008 编译器编译的,如果你的 PHP 是用 IIS 来架设的,那你就选择 VC9 版本。
二、如何选择 PHP5.3 的 Thread Safe 和 Non Thread Safe 版本
先从字面意思上理解,Thread Safe 是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式而耗尽系统资源。Non Thread Safe 是非线程安全,在执行时不进行线程(Thread)安全检查。
再来看 PHP 的两种执行方式:ISAPI 和 FastCGI。
ISAPI 执行方式是以 DLL 动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以 ISAPI 来执行 PHP,建议选择 Thread Safe 版本;
FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI(无论搭配 IIS 6 或 IIS 7)执行 PHP ,都建议下载、执行 non-thread safe 的 PHP (PHP 的二进位档有两种包装方式:msi 、zip ,请下载 zip 套件)。
而线程安全检查正是为ISAPI方式的PHP准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP。
所以,对于PHP5.2选择Thread Safe版本安装,而对于PHP5.3则下载None-Thread Safe,执行PHP比较有效率。
本文章给各位同学介绍一个php批量设置IIS目录实例代码,希望此教程 对大家会有所帮助呀。代码如下 | 复制代码 |
<?php //获取文件目录列表,该方法返回数组 function getDir($dir='') { $dir=empty($dir) ? getcwd() : $dir; $dirArray[]=NULL; if (false != ($handle = opendir ( $dir ))) { $i=0; while ( false !== ($file = readdir ( $handle )) ) { //去掉"“.”、“..”以及带“.xxx”后缀的文件 if ($file != "." && $file != ".."&&!strpos($file,".")) { $dirArray[$i]=$file; $i++; } } //关闭句柄 closedir ( $handle ); } return $dirArray; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>IIS目录批量设置</title> <style> body { font:12px/22px "Microsoft YaHei", SimSun; } input, select, texteare, button { font-family:"Microsoft YaHei", SimSun; } </style> </head> <body> <?php if(empty($_POST)){ ?> <form action="" method="post" onsubmit="return check();"> <h2>当前目录:<?php echo getcwd();?></h2> <div> <fieldset> <legend>网站目录</legend> <div> <ul> <?php $dirArr=getDir(); if(is_array($dirArr)){ foreach($dirArr as $dir){ ?> <li> <label> <input name="directory[]" type="checkbox" value="<?php echo $dir;?>" /> <?php echo $dir;?></label> </li> <?php } } ?> </ul> <div> <input id="CheckALL" type="button" onclick="checkAll();" value="全选" /> <input id="NoCheckAll" type="button" onclick="noCheckAll();" value="全不选" /> <input id="inverse" type="button" onclick="inverseCheck()" value="反选" /> </div> </div> </fieldset> </div> <div> <fieldset> <legend>执行权限</legend> <div> <select name="Execute" onchange="Warning(this.value)"> <option value="0" selected="selected">无</option> <option value="1">纯脚本</option> <option value="2">脚本和可执行</option> </select> </div> </fieldset> </div> <div> <fieldset> <legend>站点信息</legend> <div> 站点ID: <input name="SiteId" id="SiteId" type="text" value="" /> </div> </fieldset> </div> <div style="margin-top:20px; padding-left:20px;"> <input type="submit" value="提交" /> </div> </form> <script type="text/javascript"> var all = document.getElementById("CheckALL"); //全选 var single = document.getElementsByName("directory[]"); //选项 var noAll = document.getElementById("NoCheckAll"); //不全选 var inverse = document.getElementById("inverse"); //反选 var SiteId = document.getElementById("SiteId"); //SiteId function checkTrue() { for (var i = 0; i < single.length; i++) { single[i].checked = true; } } function checkFalse() { for (var i = 0; i < single.length; i++) { single[i].checked = false; } } //全选 function checkAll() { if (all.disabled == false) { noAll.disabled = false; checkTrue(); } else { noAll.disabled = true; checkFalse(); } all.disabled = true; } //全不选 function noCheckAll() { if (noAll.disabled == false) { all.disabled = false; checkFalse(); } else { all.checked = true; checkTrue(); } noAll.disabled = true; } //反选 function inverseCheck() { noAll.disabled = false; all.disabled = false; for (var i = 0; i < single.length; i++) { single[i].checked = !single[i].checked; } } function Warning(value) { if(value==2){ alert('目录拥有 "脚本和可执行" 权限会很危险请慎重选择!') } } function check(){ var checkd_sum; checkd_sum=0; for (var i = 0; i < single.length; i++) { if(single[i].checked ==true){ checkd_sum++; } } if(checkd_sum==0){ alert('请先选择目录!'); return false; } if(SiteId.value==""){ alert('请输入站点ID!'); return false; } return true; } </script> <?php }else{ $directorys=@$_POST['directory']; $Execute=@$_POST['Execute']; $SiteId=@$_POST['SiteId']; $SiteId=trim($SiteId); if($Execute=0){ $ExecutePermission="AccessRead"; } if($Execute=1){ $ExecutePermission="AccessRead | AccessScript"; } if($Execute=1){ $ExecutePermission="AccessExecute | AccessRead | AccessScript"; } ?> <div> <pre> <?php if(is_array($directorys)){ foreach($directorys as $directory ){ echo <<<EOF <IIsWebDirectory Location ="/LM/W3SVC/{$SiteId}/root/{$directory}" AccessFlags="{$ExecutePermission}" > </IIsWebDirectory>rn EOF; } } ?> </pre> </div> <?php } ?> </body> </html> |
代码如下 | 复制代码 |
<?php /P user:perm 替换指定用户的访问权限。 |
本文将通过IIS、APACHE、ASP、PHP几种服务器端或页面程序端分别讲解如何设置301重定向,先还是简单介绍下重定向。
301重定向:指的是一种非常重要的“自动转向”技术--其实谈不上技术,即网址重定向--用户访问一个地址或目录,可以指定跳转到另一个地址。
301重定向,这是所有重定向方法中唯一符合seo/seo.html" target="_blank">搜索引擎规则的重定向,这也是SEO中的一个基础名词,比方:一个站用www.111cn.net、111cn.net绑定,就会存在2个权重,如果将111cn.net重定向到www.111cn.net,就会权重集中,相应增加权重值。
1、IIS服务器上设置301重定向
准备工作:你要有服务器设置权限,可以随意开通新的虚拟空间!
第一,新建一个虚拟空间,将你需要进行重定向的域名与之解析绑定;
第二,我的电脑-->打开“控制面板”-->“管理工具”-->打开“Internet 信息服务”,左侧会有树形菜单,找到你的网站--右键“属性”--选择“主目录”选项卡,再选择“重定向到URL”,然后在地址框栏输入需要定向的目标域名,最后将选项卡中的“资源的永久重定向”选择上,点击“确定”完成操作。属性界面设置,如下图所示:
2、Unix/linux主机上apache设置301重定向
1)将不带WWW的域名转向到带WWW的域名下
代码如下 | 复制代码 |
Options +FollowSymLinks
RewriteEngine on RewriteCond %{HTTP_HOST} ^111cn.net [NC]
RewriteRule ^(.*)$www.111cn.net/301/[L,R=301] |
2)重定向到新域名
代码如下 | 复制代码 |
Options +FollowSymLinks
RewriteEngine on RewriteRule ^(.*)$www.111cn.net/301/ [L,R=301]
|
3)使用正则进行301转向,实现伪静态
代码如下 | 复制代码 |
Options +FollowSymLinks
RewriteEngine on RewriteRule ^article-(.+).html$ article.php?id=$1
将article.php?id=123这样的地址转向到article-123.html
|
3、ASP程序页面中设置301重定向代码
在公共头部文件或全局调用文件里,加上如下代码:
代码如下 | 复制代码 |
<%@ Language=VBScript %> <%
if request.ServerVariables("SERVER_NAME")!="www.111cn.net" then
Response.Status="301 Moved Permanently" Response.AddHeader "Location", "http://www.111cn.net"
Response.End end if
%>
|
原理:判断请求的server_name,是否与主目标网址一样,不一样则重定向
4、PHP程序页面中设置301重定向
代码如下:(比较完美的写法)
代码如下 | 复制代码 |
$host= 'www.111cn.net'; //你目标定向的网址 if ($_SERVER['HTTP_HOST'] != $host)//若不是则进行重定向,后面页面参数不变 { header("HTTP/1.1 301 Moved Permanently"); header("Location: http://{$host}{$_SERVER[REQUEST_URI]}"); } unset($host); |
相关文章
- 有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
- 作者:Sabine 【导读】本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序 冒泡排序 using System; namespace BubbleSorter { public class Bubb...2020-06-25
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 这篇文章主要介绍了vue接口请求加密实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-12
- 关于AES加密的算法我们就不说了,这里主要给各位演示了三个关于AES算法实现的加密例子,希望本文章能给你带来帮助。 话不多说,先放上代码,一共有两个文件:AES.php(aes算...2016-11-25
- 这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod...2017-07-06
- 使用require('crypto')调用加密模块。加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。该模块还提供了一套针对OpenSSL的hash(哈希),hmac(密钥哈希),cipher...2014-06-07
- 对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,下面通过本文给大家介绍C#连接加密的Sqlite数据库的方法,感兴趣的朋友一起看看吧...2020-06-25
- 这篇文章主要是介绍了.net C# 实现任意List的全组合算法实现代码,需要的朋友可以参考下...2020-06-25
图文详解Heap Sort堆排序算法及JavaScript的代码实现
这篇文章以图文详解Heap Sort堆排序算法及JavaScript的代码实现,堆排序算法基于类二叉树的堆数据结构,需要的朋友可以参考下...2016-05-05- 这篇文章主要介绍了C#实现对文件进行加密解密的方法,涉及C#加密与解密的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)
这篇文章主要给大家介绍了关于同时兼容JS和C#的RSA加密解密算法,通过该算法可以对web提交的数据进行加密传输,文中通过图文及示例代码介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。...2020-06-25- 若a=b ^ c;则b=a ^ c (^是异或的意思),php在处理异或的字符时先把字符转化为二进制的ascii值,对这些值进行异或,获取结果后在将ascii值转化为字符...2013-09-26
- 这篇文章主要介绍了JS实现的随机排序功能算法,结合具体实例形式分析了javascript常用的排序算法实现技巧,需要的朋友可以参考下...2017-06-15
- 这篇文章主要介绍了go语言使用RC4加密的方法,实例分析了RC4加密的技巧与实现方法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-07
- 这篇文章主要介绍了C#常用数据结构和算法,这里我们总结了一些知识点,可以帮助大家理解这些概念。...2020-06-25
- 这篇文章主要介绍了C#为配置文件加密的实现方法,可实现对配置文件中的敏感信息进行加密,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C++实现的O(n)复杂度内查找第K大数算法,结合实例形式分析了算法的原理以及具体实现方法,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了c# 如何实现位图算法(BitMap),文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要给大家介绍了关于Vue虚拟Dom与diff算法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-26