2009-01-19 22 views
14

Ich muss eine Datenbankspalte erstellen, die eine mit Triple DES verschlüsselte Zeichenfolge speichert. Wie ermittle ich die Länge der verschlüsselten Stringspalte?Länge der verschlüsselten Zeichenfolge

(Antworten für andere Algorithmen als Triple DES sind ebenfalls willkommen.)

Antwort

21

Blockchiffren wie dES, 3DES und AES nur auf Blöcke von Bytes arbeiten kann. dES und 3DES arbeiten auf Block von 8 Bytes und AES auf Blöcken von 16 Bytes.

Um dies zu umgehen, wenden Sie normalerweise eine reversible Auffüllung auf Ihren Klartext an, bevor Sie ihn verschlüsseln.Es wird meistens immer "PKCS" -Padding (auch PKCS5- oder PKCS7-Padding genannt).

PKCS-Padding fügt mindestens ein Byte hinzu, so dass der aufgefüllte Text eine Länge hat, die durch die Blocklänge (8 Bytes für 3DES) teilbar ist. Der Wert der Füll-Bytes ist die Anzahl der hinzugefügten Bytes. Fx. ABCDEF wird auf ABCDEF0505050505 aufgefüllt und 0011223344556677 wird auf 0011223344566770808080808080808 aufgefüllt. Beachten Sie, dass dies leicht zu entfernen ist: Sie sehen nur das letzte Byte der aufgefüllten Bytes an, stellen sicher, dass es zwischen 1 und der Blocklänge liegt, und entfernen diese Anzahl an Bytes vom Ende (Überprüfung, dass jedes entfernte Byte den korrekten Wert hat).

Schließlich Ihre Frage zu beantworten: Angenommen, Sie sind 3DES mit CBC-Verschlüsselung und PKCS-Polsterung mit - die Sie wahrscheinlich sind - die Verschlüsselung einer Zeichenkette der Länge n Länge haben:

n + 8 - (n % 8) 
+0

Also wenn ich 64 Bytes zu verschlüsseln habe, wäre 'n' 72? – Gabe

+0

Ja, 64 Bytes, die mit 3DES/CBC/PKCS-Padding verschlüsselt wurden, werden nach der Verschlüsselung 72 Bytes. –

1

Triple DES verwendet drei 56-Bit-DES-Schlüssel, 168-Bit-Schlüssel geben. Seine Blockgröße ist 64-bit.

+0

Bitte erarbeiten. Zum Beispiel, wenn ich eine Zeichenfolge 100 Zeichen lang habe, wie würde ich die Länge der verschlüsselten Zeichenfolge berechnen? –

+0

(string.length/8) + 1, unter der Annahme von 8 Bit Zeichen – Keltia

+0

Länge ist in Zeichen (oder Byte, wenn Sie bevorzugen), also Länge/8 verwendet 64-Bit-Blöcke. – Keltia

4

Bei Verwendung von Triple DES wird die Länge der Zeichenfolge nicht geändert, sie wird jedoch auf die nächste 64-Bit-Grenze gerundet. Wenn Sie vorhaben, es anzuzeigen, müssen Sie es (wie in Base64 though.

Wie für andere Algorithmen, ist es schwierig zu beantworten, da es viele sind. Blockchiffren werden immer Eingang pad, um ihre übereinstimmen Blockgröße während viele Stromchiffren nicht.

+0

Ich habe gerade gefunden: http://msdn.microsoft.com/en-us/library/system.security.cryptography.ciphermode.aspx Extract: "Der Cipher Text Stealing (CTS) -Modus behandelt jede Länge von Nur-Text und erzeugt Chiffretext, dessen Länge der Klartextlänge entspricht. " –

Verwandte Themen