Bacysoft.cn

 找回密码
 邀请注册
查看: 16263|回复: 0
打印 上一主题 下一主题

最简单的PHP加密,Javascript解密的方法

[复制链接]
跳转到指定楼层
楼主
发表于 2012-6-8 16:18:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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加密代码:

  1. function encodeKeyword($str){
  2.         require("kw_ansi.php");
  3.         require("kw_utf8.php");
  4.         $n = count($kw_ansi);
  5.         for ($i=0;$i<$n;$i++){
  6.                 $str = str_replace($kw_ansi[$i],'<a name="encrypted">'.filter_var($kw_utf8[$i],FILTER_SANITIZE_ENCODED)."</a>",$str);
  7.         }
  8.         return $str;
  9. }
复制代码
其中 kw_ansi.php 和 kw_utf8.php 分别定义了需要加密的关键字,关键字的内容是一样的,区别是一个使用ansi内码保存,一个使用utf8内码保存,文件内容如下:


加密函数的工作原理是:依次将目标文本中的以ANSI内码保存的关键字用经过加密的字串替换掉。加密字串首先使用filter_var函数进行URL编码,然后置于<a name="encrypted"></a>标签对中。

Javascript解密的代码很简单,如下:

  1. function unencrypt(ciperText){
  2.         var txt = decodeURI(ciperText);
  3.         return txt;
  4. }
  5. function jiemi(){
  6.         var obj = document.getElementsByName("encrypted");
  7.         for (var i=0;i<obj.length ;i++ )
  8.         {
  9.                 obj[i].innerHTML = unencrypt(obj[i].innerHTML);
  10.         }
  11. }
复制代码
解密的时候,只需要在页面的</body>标签之前加入js调用就能实现解密,代码如下:

  1. <script type="text/javascript">
  2.         jiemi();
  3. </script>
复制代码
解密原理就是,首先通过DOM获取页面上所有加密的字串,特征是所有带有“encrypted”name属性的元素的innerHTML的值。然后直接调用Javascript内置URL解码函数“decodeURI()”完成解码。

查看实际效果请访问:http://www.bacysoft.cn/ebook-jyall-a-00-1.html
下图中绿色背景关键词即为受控关键词


下图是以页面源码方式查看的结果:


此方法本质上仅仅是做了内码转换,没有实质的加密算法,读者有兴趣的话,完全可以在此基础上加入自己的加密算法。实现真正的加密和解密。(本文完)
您需要登录后才可以回帖 登录 | 邀请注册

本版积分规则



京ICP备08000958号-1|腾讯云|阿里云|联系方式|Bacysoft.cn

GMT+8, 2024-4-29 18:53 , Processed in 0.014470 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表