1

我有一个 minecraft 服务器,需要备份人们拥有的所有项目,我希望通过编辑 world/players 中的 .dat 文件来做到这一点。在这个文件中,有 .dat 文件,它们的名字是每个玩家的用户名。当我用记事本++打开它时,它向我展示了这样的胡言乱语:

在 NPP 中打开时

普通记事本给了我这个:

‹       ãb``bà
ÎIM-ÉÌM-b`àd`óÍ/ÉÌÏcc```¶ÛqæÀÉEÚ“öob=Ô£i×ý‰Ù5S  #‡ž{Q~i^
#‡GiQ   H?È46ÔÄœ’Œÿÿ™8]€byÅ@Àf¥˜3‹u88=óÊRóJò‹*AœÌùÅ`û˜Û„¥<^$çà ’apˆßñM&ðБŽ%%    ‰ÉÙ[€ÖƒÝœ™—4–Å-³(õÿV·Äœ—Ìâ’ļäTˆÉAù%‰ ï°‚\pð²±’ïÌ9L@§¥&–d€M“d  íl+  

我听说文件是 Gzipped。这就是为什么会这样吗?我怎样才能解码它,这样我才能真正阅读它。我需要从 PHP 脚本中解密它。

4

1 回答 1

0

您需要找出真正的压缩方式,但尝试使用此 (gzip) 打开文件:

<?php
$fp = fopen('compress.zlib://yourfile.dat', 'r');
if( $fp ){
    while(!feof($fp) ){
        echo fread($fp, 2048);
    }
    fclose($fp);
}
?> 

查看http://www.php.net/manual/en/wrappers.compression.php了解更多信息。

编辑:你可能想试试这个:

<?php
$dat = file_get_contents('yourfile.dat');
echo gzdecoder($dat);

function gzdecoder($d){
    $f=ord(substr($d,3,1));
    $h=10;$e=0;
    if($f&4){
        $e=unpack('v',substr($d,10,2));
        $e=$e[1];$h+=2+$e;
    }
    if($f&8){
        $h=strpos($d,chr(0),$h)+1;
    }
    if($f&16){
        $h=strpos($d,chr(0),$h)+1;
    }
    if($f&2){
        $h+=2;
    }
    $u = gzinflate(substr($d,$h));
    if($u===FALSE){
        $u=$d;
    }
    return $u;
}
?>

也不encrypted是,它的compressed。;-)

于 2011-08-23T23:55:42.610 回答