2012-04-29 16 views
1

これは本当に私を困惑させました....テキストファイルからのPHPの暗号化/復号化

私は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>"; 

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

両方のバージョンで使用されているキーと配列が同一であることが確認されました(つまり、直列化された非直列化配列には同じ値が含まれています)。

私はこれをデバッグするために探し始めなければならないアイデアはありますか?

アドバイスは、 Mitchです。

+0

私も暗号化を使用するが、私はPHPの機能/暗号を解読があることを認識してwas't。私が知っている機能と使用している機能はmcryptモジュールの一部であり、mcrypt_で始まります(例:mcrypt_decrypt)。 –

+1

'fwrite'関数で' \ n'を使っているのはなぜですか?ハードリターンは余分なバイトなので、暗号化機能が失われる可能性があります。 – Marc

答えて

2

fwrite()から改行文字を削除します。すなわち、これをしない:

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

\nは、暗号化/復号化ルーチンを台無しにすることができます。

これで十分です。

fwrite($fh, $keyCode); 
+0

助けてくれてありがとう、マーク、私はそれを理解しようとして5時間を無駄にした! –