Verständnisproblem mcrypt
Gerd
- php
Hallo zusammen,
ich glaube, ich habe ein Verständnisproblem bei der Benutzung der mcrypt-Funktionen und hoffe, mir kann jemand von dem Schlauch herunter helfen, auf dem ich stehe ;-)
Ich habe mal wieder ein wenig meinem Spieltrieb gefröhnt und möchte folgendes erreichen:
Eingabe von Inhalt und einem Passwortsatz zur Verschlüsselung.
Später soll man dann den verschlüsselten Inhalt mit Hilfe des Passwortsatzes wieder entschlüsseln können.
(Geht nicht um Speicherung von Passworten oder ähnlichen Dingen, dafür gibts Hash-Funktionen, I know.)
Die Beispiele auf php.net sind ja wirklich aussagekräftig und solange ich genau diese Beispiele benutze, ist alles in Ordnung.
Sobald ich aber versuche, den Teil der Entschlüsselung getrennt von dem Teil der Verschlüsselung zu machen, bekomme ich nur noch Zeichensalat als Ausgabe des "entschlüsselten" Wertes. Was ja nicht so gedacht sein kann.
Ich habe also einen zu verschlüsselnden Wert, einen Passwortsatz und die Verschlüsselung. Den verschlüsselten Wert übergebe ich dann der Entschlüsseln-Funktion, die den Passwortsatz ebenfalls kennt. Und dann kommt nur noch Zeichensalat.
Aus Debuging-Gründen bin ich im Moment bei folgendem Quellcode angelangt, der das Ganze einfach darstellen soll.
Ach ja, Fehler erhalte ich keinen einzigen ...
<?php
error_reporting(E_ALL | E_STRICT | E_RECOVERABLE_ERROR);
function tmp_key($td, $mode) {
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td) , $mode);
$ks = mcrypt_enc_get_key_size($td);
$key = substr(md5('toller passwortsatz'), 0, $ks);
return array($iv, $ks, $key);
}
function tmp_encrypt($plain) {
$td = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'ofb', '');
list($iv, $ks, $key) = tmp_key($td, MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$encrypted = mcrypt_generic($td, $plain);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $encrypted;
}
function tmp_decrypt($encrypted) {
$td = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'ofb', '');
list($iv, $ks, $key) = tmp_key($td, MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$decrypted = mdecrypt_generic($td, $encrypted);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return trim($decrypted);
}
if (empty($_GET['data'])) {
echo 'Keine Daten erhalten. (siehe $_GET["data"])';
exit;
}
echo 'Soll verschlüsselt werden: '. $_GET['data'] .'<br>';
$encrypted = tmp_encrypt($_GET['data']);
echo 'Ist verschlüsselt: '. $encrypted .'<br>';
$decrypted = tmp_decrypt($encrypted);
echo 'Ist entschlüsselt: '. $decrypted .'<br>';
?>
Das hier hingegen klappt hervorragend, aber ich möchte die Ver-/Entschlüsselung ja getrennt voneinander haben:
<?php
error_reporting(E_ALL | E_STRICT | E_RECOVERABLE_ERROR);
if (empty($_GET['data'])) {
echo 'Keine Daten erhalten. (siehe $_GET["data"])';
exit;
}
$td = mcrypt_module_open(MCRYPT_TRIPLEDES, '', 'ofb', '');
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td) , MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
$key = substr(md5('toller passwortsatz'), 0, $ks);
mcrypt_generic_init($td, $key, $iv);
$encrypted = mcrypt_generic($td, $_GET['data']);
mcrypt_generic_deinit($td);
mcrypt_generic_init($td, $key, $iv);
$decrypted = mdecrypt_generic($td, $encrypted);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
var_dump( $decrypted );
?>
Für alle, die bis hierhin gekommen sind, ein herzliches Dankeschön schönmal!
Wo ist mein (Denk-)Fehler?
Wer kann mir einen Schubs in die richtige Richtung geben?
Grüße
Gerd