PHP: Warnung mcrypt_generic_init (): Iv-Größe ist falsch; Lieferlänge: 12, benötigt: 8

Grundfakten

$algorithm  = MCRYPT_BLOWFISH;
$mode       = MCRYPT_MODE_CBC;
$randSource = MCRYPT_DEV_URANDOM;

Hinwei Dies ist keine strikte Kodierungsfrage.

Kontext

CentOS 7, Apache 2.4.12 und PHP 5.6.20.

Ich erstelle eine HTML-E-Mail mit dem Link "Bestätige deine E-Mail-Adresse", über den ein Registrierungsvorgang abgeschlossen werden kann. Alles auf meinem virtuellen privaten Server ist UTF-8, und alle Eingaben von Formularen und Abfragezeichenfolgen werden mit Multi-Byte-Funktionen (MB) verarbeitet.

Hintergrun

Als Experiment ch weiß über das Alter und den Zustand der mcrypt Bibliothek Beschei), Ich versuche, Blowfish-verschlüsselte Abfragezeichenfolge-Parameter zu entschlüsseln. Angenommen, auf dem Weg nach oben funktioniert die Verschlüsselungssequenz einwandfrei und ich erhalte eine E-Mail mit dem Link.

uf dem Weg nach unten, diehmac_hash() signing (SHA-512, nur für dieses Experiment) funktioniert und ich kann jede unabhängige Nachricht (32 Zeichen) von ihrer Hash-Prüfsumme (128 Zeichen) trennen. Die Base64-Dekodierung des getrennten Nachrichtenteils funktioniert. Für jeden Parameter verbleibe ich mit demusammengesetzter Chiffrete, wobei zusammengesetzter Chiffretext gleich dem @ iIV + Basis-Chiffretext. Angenommen, ich benutzea version vonsubstr(), um den IV- und den Basis-Chiffretext unabhängig voneinander zu erhalten (was für den Kurs normal ist).

Proble

PHP: Warning  mcrypt_generic_init(): Iv size is incorrect; supplied length: 12, needed: 8

Angenommen, ich habe das PHP-Handbuch und Stackoverflow gekämmt. Angenommen, ich habe andere Fragen ähnlich angeschaut, aber nicht genau wie diese. Angenommen, ich habe erfolglos im Internet gesucht. Angenommen, ich habe genug Erfahrung, um @ einzurichtemb_string richtig. Angenommen, ich kümmere mich um das Auffüllen von mcrypt, wenn ich dieses aktuelle Problem überwunden habe.

Könnten Multibyte-Probleme die Entschlüsselung stören?

Könnte base64 das @ codierIV + base cipher text korrupt die IV?

Könnte Base64-Auffüllung ein Problem sein?

Sollte ich ein spezifischeres @ angebeMCRYPT_BLOWFISH_*?

Warum gibt die Größe des Blowfish IV 8 Byte an, erzeugt aber selten eine 8-Byte-IV?

Welche substr () soll ich verwenden,substr() odermb_substr(), für ein Setup, das darauf abzielt, alles in UTF-8 zu schreiben und alle anderen Eingaben als Multibyte-UTF-8 zu verarbeiten. Ich weiß, dass dies eine seltsame Frage ist, aber alle Beispiele für die mycrypt-Entschlüsselungssequenz von PHP Manual verwendensubstr () und keine verwendenmb_substr(). Alles auf meiner Site funktioniert, wenn möglich, mit mb_functions, und es würde mir nichts ausmachen, @ zu verwendesubstr() wenn es mein Problem gelöst hat, aber es löst es nicht. Wenn ich @ benutmb_substr(), Ich erhalte die folgende Warnung.

PHP: Warning  mcrypt_generic_init(): Iv size is incorrect; supplied length: 11, needed: 8

Hat jemand Erfahrung mit genau diesem Problem? Konstruktive Antworten werden belohnt!

Neuest

Above ist ein Beispiel für einen Blowfish-Hash, den ich aus einem Array zu rekonstruieren versuche, das über eine SHA512 HMACed, symmetrisch Blowfish-verschlüsselte (CBC), urlsichere Base64-codierte, urlencodierte Abfragezeichenfolge (puh!) Empfangen wurde.

Below, sehen die Zeichenfolgen für die Abfragezeichenfolge (nachdem der Blowfish-Hash oben zerkleinert wurde) nach dem Verschlüsseln, Signieren und Base64-Codieren aus, jedoch bevor sie urlencodiert werden. Jedes Zeichen ist 128 Zeichen lang (jede Zeichenfolge wird länger, je mehr Sie tun).

Above ist das Base64-dekodierte und Blowfish-entschlüsselte Array, das aus der Abfragezeichenfolge abgeleitet wurde. Die Verschlüsselung scheint fehlerfrei zu funktionieren. Auch bei der Entschlüsselung treten keine Fehler auf. Der Klartext ist einfach falsch. Wenn ich diese Elemente verbinde / implodiere, werden sie nicht wie der Blowfish-Hash oben sein.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage