PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP + mcrypt]: Bei Entschlüsselung Zeichensalat am Anfang?


mf_2
2008-09-18, 09:24:33
Hallo zusammen,

ich benutze die mcrypt Funktionen um eine Logdatei in einem PHP Script zu verschlüsslen.

Folgendes sind meine Funktionen zum ver- und entschlüsseln:

function log_crypt($sTextToAdd)
{
$sTextToAdd=time().";".$_SESSION['auth_rid'].";".$sTextToAdd."\n";
$key = "9u433q2i92438r9z";
$file=fopen($_SERVER['DOCUMENT_ROOT']."/log.dat","rb");
$sEncLog=fread($file,filesize($_SERVER['DOCUMENT_ROOT']."/log.dat"));
fclose($file);
$sTextBeforeAdd=mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key,$sEncLog, MCRYPT_MODE_ECB, "1567ijhfiejf9038rt0og4dse38765f2");
$sTextToEnc=$sTextBeforeAdd.$sTextToAdd;
$sTextNewEnc = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $sTextToEnc, MCRYPT_MODE_ECB, "1567ijhfiejf9038rt0og4dse38765f2");
$file=fopen($_SERVER['DOCUMENT_ROOT']."/log.dat","wb");
$sEncLog=fwrite($file,$sTextNewEnc);
fclose($file);
unset($iv_size);
unset($iv);
unset($key);
unset($sEncLog);
unset($sTextToAdd);
unset($sTextBeforeAdd);
unset($sTextToEnc);
unset($sTextNewEnc);
}

function log_decrypt()
{
$key = "9u433q2i92438r9z";
$file=fopen($_SERVER['DOCUMENT_ROOT']."/log.dat","rb");
$sEncLog=fread($file,filesize($_SERVER['DOCUMENT_ROOT']."/log.dat"));
fclose($file);
$sTextDecrypted=mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key,$sEncLog, MCRYPT_MODE_ECB, "1567ijhfiejf9038rt0og4dse38765f2");
return $sTextDecrypted;
}


Eine Logzeile sieht dann so aus:
Timestamp;Benutzername;Aktion

Leider wird nun bei der Entschlüsselung irgendwie ein Haufen Zeichensalat produziert und erst danach die Zeilen im Klartext ausgegeben, in etwa so:


c̯'ŠEÖûŠ ýÎ¥²§v#ç8Æìª#
epQ1221722288;mf_2;Anmeldung
1221722291;mf_2;Anmeldung
1221722295;mf_2;Anmeldung
1221722295;mf_2;Anmeldung


Woher kommt das?
Könnt ihr mir da weiterhelfen?
Ich bin leider noch recht unerfahren, was die Mcrypt Funktionen betrifft.

Gruß,
mf_2

EDIT: Ich habe statt fread() auch schon file_get_contents() und statt fwrite() file_put_contents() ausprobiert. Dabei hat sich bei der Ausgabe absolut nichts geändert. Ich habe es auch schon mal ohne IV versucht, kein Unterschied.

Berni
2008-09-18, 16:50:48
Bin mir ned sicher aber ich vermute folgendes: Wenn das File anfangs leer ist, dann macht mcrypt_decrypt() in Zeile 8 diesen Zeichensalat und schreibt ihn ins File (minimale Blockgröße oder sowas). Könnte das sein?

mf_2
2008-09-18, 20:12:16
Super!! Genau das war's! Vielen Dank! :)