mcrypt_encrypt nicht richtig funktioniert auf PHP 5.6.9
Ich habe den folgenden code der gut funktioniert hat auf PHP 5.5.9.
function index()
{
echo $this->encryptText_3des('TEST','JHHKJH9879');
}
function encryptText_3des($plainText, $key) {
$key = hash("md5", $key, TRUE);
for ($x=0;$x<8;$x++) {
$key = $key.substr($key, $x, 1);
}
$padded = $this->pkcs5_pad($plainText,
mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC));
return $encrypted;
}
function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
War die Verschlüsselung geschieht in Ordnung.Aber in 5.6.9, die in der PHP-doc der mcrypt_encrypt, Sie erwähnen, dass
Ungültiger Schlüssel-und iv-Größen werden nicht mehr angenommen. mcrypt_encrypt() wird nun werfen Sie eine Warnung aus und gibt FALSE zurück, wenn die Eingaben ungültig sind. Zuvor keys und IVs waren gepolstert und mit '\0' - bytes auf die nächste gültige Größe.
Wie werde ich ändern mein Aktueller code mit dem fünften parameter zu verändern, ohne die Verschlüsselung Algorithmus?
Versuchte ich
$iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
gegeben und $iv als fünften parameter.
Aber es hat nicht funktioniert. Die Verschlüsselung war anders als die früheren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht emulieren von alten PHP-Versionen schwache Verhalten bei der Initialisierung IV.
Verwenden
mcrypt_create_iv()
.Entfernten Sie die auto-zero-byte-iv für eine Grund.
MCRYPT_DEV_URANDOM
auch!Die Antwort gefunden, falls jemand braucht
Pass 5. parameter manuell einzustellen, die die frühere version war auf seinen eigenen!
Ich würde Ihnen raten, gegen das Rad neu erfinden, da Ihre Funktion hat zahlreiche Kryptographie-engineering-Fehler.
MCRYPT_RIJNDAEL_128
- unabhängig von Ihrer gewünschten Schlüsselgröße. Mcrypt ist ziemlich schrecklich.md5()
als key derivation Funktion. Wenn Sie feststellen, selbst benötigen ein KDF (z.B. weil Sie mit einem Passwort statt der Speicherung eine Verschlüsselung, key), verwenden Siehash_pbkdf2()
mit SHA-256.Wenn du gehst zu verwenden, mcrypt (unsere Empfehlungen für sichere Daten-Verschlüsselung in PHP sind zu verwenden libsodium, wenn Sie können; sonst entschärfen/php-Verschlüsselung; sonst openssl), stellen Sie sicher, dass Sie das korrekte Konstante zu
mcrypt_create_iv()
.Bad:
Gute: