Problem: Das Verschlüsseln und Entschlüsseln innerhalb ein und desselben Skriptes ist soweit problemlos. Schwierig wird es, wenn man eine Datei benutzt, die temporär den verschlüsselten Text enthält (z.B. eine Session mit einem verschlüsselten Passwort), der irgendwann bei Bedarf wieder entschlüsselt werden soll. Hier traten zwei Bugs (?) auf:
1) Die Warnung: "Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize ..." ist nicht verständlich. Siehe dazu auch:
http://www.zend.com/lists/php-dev/200304/msg00491.html
2) Die Ergebnisse des Ver- und Entschlüsseln sind nicht "stabil". Nach ca. einem dutzend korrekter Ergebnisse gab es dann auch Aussetzer.
Aber vielleicht habe ich auch ein Fehler gemacht. Mein PHP Testscript als txt => http://www.apachefriends.org/winxampp/mcrypttest.txt. Vgl. hierzu auch http://de2.php.net/manual/de/ref.mcrypt.php.
<?php
//// EXAMPLE 1. ////
//// So geht noch alles gut (so it's ok for all in one) ///////////
$key="My Key";
$text="My plain text";
// Verschlüsseln (Enrypt)
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
// Entschlüsseln (Decrypt)
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
echo "EXAMPLE 1:<br><br>Key: $key<br>Text: $text<br>Encrypt: $crypttext<bR>Decrypt: $decrypttext";
//// EXAMPLE 2. with write and get the crypt text in a binary file ////
//// Hier gibt es dann Probleme ... (with problems ...) ///////////
$otherkey="Another Key";
$othertext="Another plain text";
$filename = "crypt.bin";
// Enrypten ...
$otheriv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$otheriv = mcrypt_create_iv($otheriv_size, MCRYPT_RAND);
$othercrypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $otherkey, $othertext, MCRYPT_MODE_ECB, $otheriv);
// In Datei schreiben (binär)
$print="$otheriv\r\n$othercrypttext";
echo "<bR><br><br>EXAMPLE 2:<br><br>Key: $otherkey<br>Text: $othertext<bR>File zum Speichern: $filename<br><br>Schreibe in Datei<br>=> neuen iv: $otheriv<br>=> den verschlüsselten Test: $othercrypttext";
$new_print = fopen($filename,"wb+");
fwrite($new_print,$print);
fclose($new_print);
// Aus der Datei lesen
$datei = fopen($filename,"rb");
$i=0;
while(!feof($datei))
{
// $zeile = fread($datei,filesize($filename));
$zeile = fgets($datei,255);
$cryptzeile[]=$zeile;
$i+=1;
}
fclose($datei);
// Decrypten ...
echo "<br><br>Habe nun aus Datei gelesen: <br>=> neuen iv: $cryptzeile[0]<br>=> den verschlüsselten Test: $cryptzeile[1]";
$otherdecrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $otherkey, $cryptzeile[1], MCRYPT_MODE_ECB, $cryptzeile[0]);
echo "<br>Habe nun alles dechriffiert:<br>Orignaler Text: $othertext<br>Chiffrierter Text aus Datei: $cryptzeile[1] <br>Dechiffrierter Text aus Datei: $otherdecrypttext";
//// FAZIT /////////////////
echo "<br><br><br>FAZIT:<bR><br>
<UL>
<LI>\"Warning: mcrypt_decrypt(): The IV parameter must be as long as the blocksize ...\" ist anscheindend ein Bug für PHP 4 und mcrypt(). Vgl. bitte ZEND Bug Report: <A HREF=\"http://www.zend.com/lists/php-dev/200304/msg00491.html\">
http://www.zend.com/lists/php-dev/200304/msg00491.html</A></LI>
<LI>Das encrypt in und decrypt aus einer Datei ist instabil, da ab und zu unverständlich plötzlich (!!!) die Decodierung nicht mehr funktioniert. Öfter mal die Seite aktualisieren, dann kommt ihr bestimmt auch mal in diesen zweifelhaften Genuß.</li>
</UL>
<B>Eigentlich schade!</B> (Kay Vogelgesang)";
?>