Verringern Sie die Länge der verschlüsselten Zeichenfolge im Code-Signierer

9

Wenn ich versuche, eine Zeichenkette mit der Verschlüsselungsbibliothek nach CI zu verschlüsseln, ist die zurückgegebene Zeichenkette sehr groß und etwa 178 Zeichen lang. Gibt es eine Methode, um die Länge der Zeichenfolge zu reduzieren? Standardchiffre ist: AES-128.

Angenommen: $data=$this->encryption->encrypt("welcome to ooty"); es gibt 178 length string value zurück. ich brauche es unter 20 zu reduzieren

Update: Wenn ich eine Zahl verschlüssle, sagen wir 6, gibt es eine 178 lange Zeichenfolge zurück.

    
Tibin 29.03.2016, 08:03
quelle

3 Antworten

3

Die Länge der AES-Verschlüsselungsausgabe hängt vom Modus ab. Ein Streaming-Modus wie der CTR-Modus ändert die Länge nicht. Ein Block-Modus wie ECB oder CBC muss auf ein Vielfaches der Blocklänge aufgefüllt werden, aber PKCS # 7 Padding erhöht nur die Länge maximal einer Blockgröße, 16 Bytes für AES.

Es gibt mehr, als nur die Bytes zu verschlüsseln. Ein Modus wie CBC kann verwendet werden und die IV (eine Blocklänge) kann den verschlüsselten Daten vorangestellt werden. Authentifizierung kann hinzugefügt werden und das könnte vielleicht 32 Bytes hinzufügen. Es kann eine Passwortableitung geben und das Salz und die Zählung können hinzugefügt werden. Schließlich kann das Ergebnis in Base64 oder hexadezimal kodiert werden, was die Länge um 33% oder 100% erhöhen würde.

Möglicher Fall: "Willkommen in ooty" ist 15 Bytes. Padding ist 1 Byte, Authentifizierung 32 Bytes, Salt 32 Bytes, Count 2 Bytes, Version 1-Byte = 83 Bytes, Hexadezimal codiert = 166 Bytes, nahe den 178 Bytes, die Sie erhalten.

All dieses Extra kauft Sicherheit. Abhängig von Ihrer Verwendung ist möglicherweise nicht alles erforderlich, wenden Sie sich an einen kryptografischen Domänenexperten.

    
zaph 29.03.2016, 12:17
quelle
1

Sie könnten eine andere Kombination aus Cipher-, Cipher-Mode- und HMAC-Algorithmus verwenden, die weniger Daten-Overhead hinzufügen würde, aber nein - der resultierende CipherText wird nicht auf 20 reduziert - der HMAC allein ergibt mindestens 28 Bytes.

Bedenkt man auch Ihre Beschreibung ("ungefähr 178 Zeichen"), ist der plainText selbst länger als 20 Bytes ... Verschlüsselung ist keine Komprimierung, Sie können nicht erwarten, dass der resultierende cipherText eine geringere Länge als der plainText hat .

    
Narf 29.03.2016 08:30
quelle
0

Nun, du könntest substr($encodedString, 0, 20) machen, aber das wäre eine SEHR SCHLECHTE IDEA ™

Sie würden die Entropie der verschlüsselten Zeichenfolge und damit die Sicherheit dieser Verschlüsselung stark reduzieren. Es ist so lange aus einem Grund!

    
Niet the Dark Absol 29.03.2016 08:14
quelle