$buf = file_get_contents("photo.dat");
$buf = unpack("C*", $buf);
$GLOBALS["magic"] = $buf[1] ^ 0xff;
$photo = array_map("my_xor", $buf);
// 这上面都是对的
$photo = pack("H*", $photo);
file_put_contents("photo.jpg", $photo);
结果写出的图片大小才几个字节。。。 想知道是哪里错了。。。 实在 google 不出来
不好意思,Callback函数忘记贴上来了。。
function my_xor($b)
{
return $b ^ $magic;
}
1
yao978318542 2016-08-23 16:53:16 +08:00
告诉我你用的什么代理 我就告诉你怎么解决
|
2
hard2reg OP @yao978318542 代理是指什么?
|
3
yao978318542 2016-08-23 17:21:05 +08:00
你都能 google 了 翻墙的梯子啊!
|
4
hard2reg OP @yao978318542 用的 Shadowsocks 啊。。。你可以教我怎么解决了吧。。
|
5
yao978318542 2016-08-23 17:30:58 +08:00
我先听一下你的需求吧 看你的代码容易和你犯同样的错误
|
6
hard2reg OP @yao978318542 就是读取 dat 文件,把里面的每个字节与指定十六进制数异或,然后将异或后的数据保存为 jpg 。
|
7
wesley 2016-08-23 18:48:01 +08:00
图片开头若干个字符是描述信息,你做异或运算不应该包含这些字符
|
9
hard2reg OP 这贴就这么死了?
|
10
yao978318542 2016-08-24 09:29:50 +08:00
my_xor 函数贴出来啊 加密是你加的吗?还是你要破解
|
11
des 2016-08-24 09:45:52 +08:00 via Android
为什么不用 fopen ??
你应该去看一下 pack 是怎么传参的。 还有“ my_xor ”是什么鬼? |
12
hard2reg OP |
13
yao978318542 2016-08-24 13:50:33 +08:00
感觉悬 看来帮不上你了
|
14
hard2reg OP @yao978318542 /(ㄒoㄒ)/~~
|
15
des 2016-08-24 14:24:39 +08:00
@hard2reg 你是想要这样??
$photo = array_map(function($b){return pack('H',$b^$magic)}, $buf); |
16
yao978318542 2016-08-24 14:31:05 +08:00
@hard2reg 要不你把文件发给我 我帮你试试?
|
18
hard2reg OP @des 嗯,现在写出文件后文件大小对了,但是。。。貌似解密失败?
$buf = file_get_contents('photo.dat'); $buf = unpack('C*', $buf); $magic = $buf[1] ^ 0xff; $photo = array_map(function($b){return pack('H', $b ^ $magic);}, $buf); $b = file_put_contents('photo.jpg', $photo); 这是正确解密的 Python 代码 def _decode_pc_dat(self, datfile): with open(datfile, 'rb') as f: buf = bytearray(f.read()) magic = 0xff ^ list(buf)[0] if buf else 0x00 imgfile = re.sub(r'.dat$', '.jpg', datfile) with open(imgfile, 'wb') as f: newbuf = bytearray([b ^ magic for b in list(buf)]) f.write(newbuf) |
19
hard2reg OP |
20
yao978318542 2016-08-25 11:34:50 +08:00
@hard2reg 能吧代码发给我一份参考一下吗?多谢
|
21
hard2reg OP @yao978318542
$buf = unpack('C*', $buf); $magic = $buf[1] ^ 0xff; $photo = array_map(function($b){return pack('C', $b ^ $GLOBALS['magic']);}, $buf); $file_name = md5(microtime()) . '.jpg'; $b = file_put_contents($file_name, $photo); |