php пишет дополнительные строки в зашифрованные файлы? - PullRequest
0 голосов
/ 30 июня 2011

Я пытаюсь открыть зашифрованный файл, в котором будет храниться список информации, затем добавить новый идентификатор с информацией и сохранить файл обратно, как он был изначально зашифрован. У меня есть функции 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;
}


?>

Следует сохранить весь список идентификаторов и соответствующих им групп, но по какой-то причине он показывает только последний ввод: (

1 Ответ

2 голосов
/ 30 июня 2011

Я бы не назвал это шифрованием."Кольцо декодера коробки от хлопьев", возможно.Если вам нужно шифрование, используйте функции mcrypt .В лучшем случае это запутывание.

Проблема в том, что вы делаете fopen() перед выполнением file_get_contents.Использование режима w+ усекает файл до 0 байтов как часть вызова fopen ().Таким образом, к моменту появления file_get_contents вы удалили исходный файл.

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

в таком порядке решит проблему.

...