php: mcrypt_encrypt to openssl_encrypt und OPENSSL_ZERO_PADDING Probleme

8

Ich habe diesen Aufruf mcrypt_encrypt für einen gegebenen Schlüssel $, $ Nachricht und $ iv:

%Vor%

Ich möchte den mcrypt_encrypt -Aufruf zu einem openssl_encrypt eins ändern, um dies zukunftssicher zu machen.

Mit $mode = 'des-ede3-cbc' oder $mode = '3DES'; und $options = true bekomme ich eine ähnlichere Antwort, aber nicht identisch. Gibt es eine andere Möglichkeit, es aufzurufen, um eine perfekte Übereinstimmung zu erhalten?

Ich bekomme das (base64_encoded) für eine lorem-ipsum $message + $key Kombination, also fange ich an zu glauben, dass die eine oder die andere Funktion die Nachricht vor dem Verschlüsseln etwas auffüllt ...

für mcrypt

  

"Y + JgMBdfI7ZYY3M9lJXCtb5Vgu + rWvLBfjug2GLX7uo="

für openssl

  

"Y + JgMBdfI7ZYY3M9lJXCtb5Vgu + rWvLBvte4swdttHY="

Versucht mit $ Optionen OPENSSL_ZERO_PADDING zu übergeben, aber alles außer 1 ( OPENSSL_RAW_DATA oder true ) zu übergeben ergibt einen leeren String ...

Verwenden Sie weder OPENSSL_ZERO_PADDING noch OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING work ...: (

Irgendwelche anderen Hinweise? Ich verwende "OpenSSL 1.0.2g 1. März 2016".

Lesen Sie bereits dies q & amp; a, aber es tut nicht Hilf mir. Nicht die nur eins mit Padding Probleme, aber nein Lösung bisher in Sicht. (Zweite Antwort spricht über Hinzufügen von Padding zu Mcrypt Anruf, ich würde wirklich wollen entfernen Padding von openssl Verschlüsselungsanruf ...

    
yivi 16.12.2016, 10:09
quelle

2 Antworten

13

mcrypt_encrypt Zero-Pads Eingabedaten, wenn es kein Vielfaches der Blockgröße ist. Dies führt zu mehrdeutigen Ergebnissen, wenn die Daten selbst abschließende Nullen haben. Anscheinend erlaubt Ihnen OpenSSL nicht, in diesem Fall Null-Padding zu verwenden, was den falschen Rückgabewert erklärt.

Sie können dies umgehen, indem Sie das Padding manuell hinzufügen.

%Vor%

Dies druckt beide als gleich.

%Vor%     
Joe 16.01.2017, 13:00
quelle
-2

mcrypt_encrypt verwendet Nullen, um die Nachricht an die Blockgröße anzupassen. So können Sie dem Schwanz Ihrer Rohdaten Nullen hinzufügen und dann den Block verschlüsseln.

Die Verwendung von OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING sollte funktionieren. Wenn dies nicht der Fall ist, können Sie das Padding von den entschlüsselten Daten selbst entfernen.

    
Nickolay Olshevsky 16.01.2017 09:43
quelle

Tags und Links