PHP AES verschlüsseln / entschlüsseln
Fand ich ein Beispiel für en - /Decodierung von strings in PHP. Auf den ersten sieht es sehr gut, aber es wird nicht funktionieren 🙁
Weiß jemand, was das problem ist?
$Pass = "Passwort";
$Clear = "Klartext";
$crypted = fnEncrypt($Clear, $Pass);
echo "Encrypted: ".$crypted."</br>";
$newClear = fnDecrypt($crypted, $Pass);
echo "Decrypted: ".$newClear."</br>";
function fnEncrypt($sValue, $sSecretKey) {
return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $sSecretKey, $sDecrypted, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
}
function fnDecrypt($sValue, $sSecretKey) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $sSecretKey, base64_decode($sEncrypted), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}
Ist das Ergebnis:
Verschlüsselt: boKRNTYYNp7AiOvY1CidqsAn9wX4ufz/D9XrpjAOPk8=
Entschlüsselt: —‚(ÑÁ ^ yË~F'¸®Ó–í œð2Á_B‰Â—
InformationsquelleAutor der Frage Andreas Prang | 2010-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
$sDecrypted
und$sEncrypted
waren undefiniert in Ihrem code. Finden Sie eine Lösung, die funktioniert (aber nicht sicher!):STOP!
Aber es gibt andere Probleme in diesem code, die machen es zu unsicher, insbesondere die Verwendung von EZB (die ist nicht Verschlüsselung - Modus, nur ein Baustein auf dem Verschlüsselungs-Modi definiert werden können). Sehen Fab Sa ' s Antwort für eine schnelle Lösung der schlimmsten Probleme und Scott ' s Antwortwie dieses Recht zu.
InformationsquelleAutor der Antwort zz1433
Bitte verwenden Sie eine vorhandene sichere PHP-Verschlüsselung-Bibliothek
Es ist generell eine schlechte Idee, zu schreiben, Ihre eigenen Kryptografie, es sei denn, Sie haben Erfahrung brechen andere Völker Kryptographie-Implementierungen.
Keines der Beispiele hier die Authentifizierung der Chiffretextdas macht Sie anfällig für bit-rewriting Angriffe.
Wenn Sie können, installieren von PECL-extensions, libsodium ist noch besser
Dann um es zu testen:
Diese können in jeder situation verwendet werden, wo Sie die übergabe von Daten an den client (z.B. verschlüsselten cookies für sessions ohne server-side storage, verschlüsselte URL-Parameter, etc.) mit einem angemessen hohen Grad an Sicherheit, dass die end-Benutzer nicht entziffern können oder zuverlässig zu manipulieren.
Seit libsodium ist cross-Plattformdies macht es auch einfacher zu kommunizieren mit PHP aus, z.B. Java-applets oder native mobile apps.
Hinweis: Wenn Sie eigens hinzufügen müssen, verschlüsselte cookies powered by libsodium zu Ihrer app, die mein Arbeitgeber Paragon Initiative Unternehmen ist die Entwicklung einer Bibliothek namens Halitedass bedeutet all dies für Sie.
InformationsquelleAutor der Antwort Scott Arciszewski
Informationen
MCRYPT_MODE_ECB
nicht der IV (Initialisierungsvektor). EZB-Modus teilen Sie Ihre Nachricht in Blöcke, und jeder block wird separat verschlüsselt. Ich wirklich nicht empfohlen, es.CBC-Modus verwenden Sie die IV um jede Nachricht eindeutig ist. CBC wird empfohlen und sollte verwendet werden, anstelle der EZB.
Beispiel :
Haben Sie an das Lager IV zu entschlüsseln jede Nachricht (IV nicht Geheimnis). Jede Botschaft ist einzigartig, weil jede Nachricht hat einen einzigartigen IV.
InformationsquelleAutor der Antwort Fabien Sa
Wenn Sie nicht verwenden will, eine schwere Abhängigkeit für etwas, das lösbar in 15 Zeilen code, verwenden Sie die integrierte in OpenSSL Funktionen. Die meisten PHP-Installationen kommen mit OpenSSL, ermöglicht einen schnellen, kompatiblen und sicheren AES-Verschlüsselung in PHP. Gut, es ist sicher, solange Sie die folgenden best practices.
Folgenden code:
IV ist eine information der öffentlichkeit und die Bedürfnisse, die zufällig für jede Nachricht. Der hash wird sichergestellt, dass die Daten nicht manipuliert wurde.
Verwendung:
InformationsquelleAutor der Antwort blade
Paar wichtige Dinge zu beachten bei der AES-Verschlüsselung:
CBC
statt.InformationsquelleAutor der Antwort Navneet Kumar
Wenn Sie MCRYPT_RIJNDAEL_128, versuchen
rtrim($output, "\0\3")
. Wenn die Länge des Strings ist weniger als 16, die decrypt-Funktion zurückgegeben wird ein string mit der Länge von 16 Zeichen, hinzufügen 03 am Ende.Können Sie leicht überprüfen, z.B. indem Sie versuchen:
InformationsquelleAutor der Antwort Kamen