2

これは本当に困りました……。

PHPを使用して暗号化をいじっています。

メモリを使用すると、すべてがうまくいきます....

//encrypt the sensitive data
$encryptedData = encrypt($senstiveData, $theKey);

//decrypt the data
$decryptedData = decrypt($encryptedData, $theKey);

//print decrypted string
echo "<br>Decrypted String:" . $decryptedData;

つまり、復号化された文字列: 正しい値が含まれています。

ただし、情報をファイルに書き出すと..壊れます。

$orderFile = "orders.dat";
$fh = fopen($orderFile, 'a') or die("can't open file");
fwrite($fh, $keyCode . "\n");
$serializedArray = serialize($encryptedData); 
fwrite($fh, $serializedArray . "\n");
fclose($fh);

$file = fopen("orders.dat","r");

//key is first line in 'orders.dat'
$theKey = fgets($file);

//serialised array is second line...
$unserializedArray = unserialize(fgets($file));

$decryptedData2 = decrypt($unserializedArray, $theKey);

//print decrypted string
echo "<br>Decrypted String:" . $decryptedData2 . "<br>";

そして... 答えは間違っています。

両方のバージョンで使用されているキーと配列が同一であることを確認しました (つまり、再構築されたシリアル化されていない配列には、シリアル化される前と同じ値が含まれています)。ファイルに書き込むときに変換中に何かが失われる可能性がありますか?

これをデバッグするために探し始めるべきアイデアはありますか?

アドバイスをいただければ幸いです、ミッチ。

4

1 に答える 1

3

から改行文字を削除しますfwrite()。つまり、これをしないでください:

fwrite($fh, $keyCode . "\n");

これ\nにより、暗号化/復号化ルーチンが台無しになる可能性があります。

これで十分です。

fwrite($fh, $keyCode);
于 2012-04-29T04:55:12.680 に答える