0

我正在尝试打开一个将存储信息列表的加密文件,然后添加一个带有信息的新 ID,然后将文件保存回原来的加密状态。我有正在工作的 xor/base64 函数,但我无法让文件保留旧信息。

这是我目前使用的:

$key = 'some key here';

$id = $_GET['id'];
$group = $_GET['group'];
$file = "groups.log";
$fp = fopen($file, "w+");
$fs = file_get_contents($file);


$filedec = xorstr(base64_decode($fs),$key);

$info = "$id: $group";
$filedec = $filedec . "$info\n";
$reencode = base64_encode(xorstr($filedec,$key));

fwrite($fp, $reencode);
fclose($fp);



function xorstr($str, $key) {
$outText = '';
for($i=0;$i<strlen($str);)
  {
    for($j=0;$j<strlen($key);$j++,$i++)
    {
        $outText .= $str[$i] ^ $key[$j];
    }
  }
  return $outText;
}


?>

它应该保存 ID 及其相应组的完整列表,但由于某种原因,它只显示最后一个输入:(

4

1 回答 1

2

我不会称之为加密。“麦片盒解码器戒指”,也许。如果要加密,请使用mcrypt函数。充其量这是混淆。

问题是你在fopen()做 file_get_contents 之前正在做。作为 fopen() 调用的一部分,使用 modew+会将文件截断为 0 字节。因此,当 file_get_contents 出现时,您已经删除了原始文件。

$fs = file_get_contents(...);
$fh = fopen(..., 'w+');

按此顺序将解决问题。

于 2011-06-29T21:39:24.667 回答