Bacysoft.cn
标题:
最简单的PHP加密,Javascript解密的方法
[打印本页]
作者:
bacy001
时间:
2012-6-8 16:18
标题:
最简单的PHP加密,Javascript解密的方法
本帖最后由 bacy001 于 2012-6-12 22:13 编辑
今年年初,为了丰富本站内容,本站推出了
在线电子图书馆
服务,当时采用了 iframe 框架来显示电子书的内容,但是这样就导致Google、百度等搜索引擎不能很好的收录电子书的内容,于是决定改版,即在页面上直接输出电子书中的内容。但是因为本站所使用的服务器安装了网监的监控系统,该系统有一个关键字列表,一旦发现被监控的网页中出现了受控关键字,就会直接拦截!最终结果是目标页面无法显示。
不可否认这套系统在扫除色情反动信息方面还是相当有效的,值得肯定,但还是不够智能,比如本站
在线电子图书馆
中金庸全集的某些内容就被系统拦截,让人哭笑不得。
读者可以通过访问以下链接看到网监关键字过滤的效果:
http://www.bacysoft.cn/myroom/kw_ansi.html
经过测试,该系统只能过滤GBK编码的汉字,也就是说,如果网页文本使用ANSI内码存储的,才会被过滤,如果采用UTF8内码保存,则不会被过滤!实际效果可以查看以下页面:
http://www.bacysoft.cn/myroom/kw_utf8.html
基于此,才有了使用PHP将关键字的内码先转换成UTF8内码,相当于加密,然后页面传送到客户端以后,在使用Javascript进行解码。
以下是PHP加密代码:
function encodeKeyword($str){
require("kw_ansi.php");
require("kw_utf8.php");
$n = count($kw_ansi);
for ($i=0;$i<$n;$i++){
$str = str_replace($kw_ansi[$i],'<a name="encrypted">'.filter_var($kw_utf8[$i],FILTER_SANITIZE_ENCODED)."</a>",$str);
}
return $str;
}
复制代码
其中 kw_ansi.php 和 kw_utf8.php 分别定义了需要加密的关键字,关键字的内容是一样的,区别是一个使用ansi内码保存,一个使用utf8内码保存,文件内容如下:
加密函数的工作原理是:依次将目标文本中的以ANSI内码保存的关键字用经过加密的字串替换掉。加密字串首先使用filter_var函数进行URL编码,然后置于<a name="encrypted"></a>标签对中。
Javascript解密的代码很简单,如下:
function unencrypt(ciperText){
var txt = decodeURI(ciperText);
return txt;
}
function jiemi(){
var obj = document.getElementsByName("encrypted");
for (var i=0;i<obj.length ;i++ )
{
obj[i].innerHTML = unencrypt(obj[i].innerHTML);
}
}
复制代码
解密的时候,只需要在页面的</body>标签之前加入js调用就能实现解密,代码如下:
<script type="text/javascript">
jiemi();
</script>
复制代码
解密原理就是,首先通过DOM获取页面上所有加密的字串,特征是所有带有“encrypted”name属性的元素的innerHTML的值。然后直接调用Javascript内置URL解码函数“decodeURI()”完成解码。
查看实际效果请访问:
http://www.bacysoft.cn/ebook-jyall-a-00-1.html
下图中绿色背景关键词即为受控关键词
下图是以页面源码方式查看的结果:
此方法本质上仅仅是做了内码转换,没有实质的加密算法,读者有兴趣的话,完全可以在此基础上加入自己的加密算法。实现真正的加密和解密。(本文完)
欢迎光临 Bacysoft.cn (http://bacysoft.cn/)
Powered by Discuz! X3.3