2009-06-22 10 views
3

Ich verschlüsseln und entschlüsseln erfolgreich, aber wenn ich den Wert entschlüsseln, erscheint seltsame Zeichen am Ende der Zeichenfolge, " ". Die ursprünglichen $_POST['value'] haben keine Leerzeichen oder seltsame Zeichen.Warum erscheinen diese seltsamen Charaktere in Mcrypt?

Wie kann ich das lösen?

ich mit diesem verschlüsseln:

$key = 'my key'; 
$td = mcrypt_module_open('tripledes', '', 'ecb', ''); 
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 
mcrypt_generic_init($td, $key, $iv);   
$id = mcrypt_generic($td, $_POST['value']); 
mcrypt_generic_deinit($td); 
mcrypt_module_close($td); 

ich mit diesem entschlüsseln:

$key = 'my key'; 
$td = mcrypt_module_open('tripledes', '', 'ecb', ''); 
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); 
mcrypt_generic_init($td, $key, $iv); 
$id = mdecrypt_generic($td, $_COOKIE['value']); 
mcrypt_generic_deinit($td); 
mcrypt_module_close($td); 

Antwort

3

Diese Unicode-Einheiten sind. Probieren Sie utf8_decode() für die Ausgabe aus.

Es gibt auch eine related closed PHP Bug

mcrypt erzeugt binäre Ausgabe, die weder iso-8859-1 noch utf-8 deshalb sollten Sie Ihre Datenbank sagen, dass die Daten binär Zeug ist, keine Daten Text.

Ich fand auch diese Informationen auf dem mcrypt example page.

ich konnte En/Entschlüsseln innerhalb VB und PHP einfach gut Aber wenn ich ein in VB zu verschlüsseln versucht und entschlüsseln, in PHP bekam ich die falsche Werte mit der Mcrypt-Funktion allein

Ich fand, dass zumindest bei VB9, dass die Stream-Verschlüsselung ein UTF-Zeichen verwendet, das den Wert für wie viele fehlende Bytes im 8-Bit-Stream ist.

Also, wenn Sie 1234 verschlüsseln wird es viermal chr (4) hinzufügen (die Menge der fehlenden Bytes) In PHP verwenden Sie chr sonst meisten Browser/Client kann es nicht lesen. Ich bin nicht gut darin, Dinge zu erklären, aber der PHP-Code, den ich herausgefunden habe, ist unten.

-1

Not ist aus VB von PHP ist (encrypt) und PHP (entschlüsseln), und die Seite ist UTF-8 und die Datenbank ist UTF-8 und die Verbindung UTF-8.

Not ist von allen. Ich verschlüssele zwei Passphrasen. Die ersten haben seltsame Zeichen und die letzte hat keine. Alle Werte sind vom selben POST <form>.

0

Verwenden Sie die folgende Funktion für entschlüsselten Text.

1

Versuchen Sie, anstelle des ecb-Modus auf cfb umzuschalten, und schreiben Sie dann die Funktionen so um, dass sie dieselbe IV für die Ver- und Entschlüsselung verwenden. Eine einfache Möglichkeit ist das Weiterleiten von IV zusammen mit den verschlüsselten Daten (ich nehme an, Sie haben am Ende Ihrer Funktion etwas wie "return $ chroced_data", Sie können $ iv. $ Verschlüsselte_data anstatt $ verschlüsselte_data selbst zurückgeben, und dann die IV mit substr() zurückbekommen. Arbeitete für mich.

6

Es füllt nur das Ergebnis basierend auf der verwendeten Blockgröße auf. Wenn Sie rtrim() verwenden, werden Sie sie loswerden.

Verwandte Themen