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を実行する前に実行していることです。モードを使用するw+と、fopen()呼び出しの一部としてファイルが0バイトに切り捨てられます。したがって、file_get_contentsが表示されるまでに、元のファイルは削除されています。

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

この順序で問題が修正されます。

于 2011-06-29T21:39:24.667 に答える