赞
踩
用php 测试一个加密的文件,发现总是解不对,认真研究后,发现网上下载的unicode 文件头部包含了“0xef 0xbb 0xbf"三个字节,查网原来是unicode 签名,嗯,就是这么个鬼,贴上我的php解密程序,还有一些用途。
//展示如何从命令行获取参数
//展示如何获取文件内容到字符串或内存
//展示如何获取字母数值 ord(char)
//展示一个简单的解密算法
//发现网站上下载的unicode 文件,其头部包含了0xef,0xbb,0xbf 这三个字符(unicode 标志,签名)
- <?php
- //展示如何从命令行获取参数
- //展示如何获取文件内容到字符串或内存
- //展示如何获取字母数值 ord(char)
- //展示一个简单的解密算法
- //发现网站上下载的unicode 文件,其头部包含了0xef,0xbb,0xbf 这三个字符(unicode 标志,签名)
-
- echo "argc:=" . $argc ."\n";
- print_r($argv) ; //argv[0] 是自己,argv[1] 是参数1
- if(file_exists($argv[1]))
- {
- $content=file_get_contents($argv[1]);
- $decode = decrypt($content,"techwin");
- echo $decode;
- }
- // 网站上下载的unicode 文件, 带有BOM(byte order mark)ef bb bf 三个字节。
-
- // 用二进制文件打开,可以看到这三个字符,用010editor可以看到,用xxd 可以看到.
- // 用文本编辑器就看不到了, 原来还隐藏这么个鬼。
- // 所以解密时必须要去掉这三个字节, 解密都是按字节计算的。
- function decrypt($str,$key)
- {
- //前3个字符是ef bb bf BOM(byte order mark) unicode 签名,
- if(ord($str[0])==0xef && ord($str[1])==0xbb && ord($str[2])==0xbf)
- {
- echo "unicode BOM.\n";
- $str=substr($str,3);
- }
- $decode="";
- $len=strlen($str);
- $keylen=strlen($key);
-
- for($i=0;$i<$len;$i++)
- {
- $ki= $i% $keylen;
- $decode .= $str[$i] ^ $key[$ki];
- }
- return $decode;
- }
- ?>

赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。