Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Welche Länge muss ich für mit AES-256-CBC verschlüsselte Zeichenfolgen in der Datenbank angeben?

Die Blockgröße von AES beträgt 16 Bytes, Sie benötigen also

  • die Größe Ihrer Eingabe, aufgerundet auf das nächste Vielfache von 16
  • plus, wenn die Eingabe bereits ein Vielfaches von 16 ist, eine Blockgröße für das PKCS#5-Padding
  • plus 16 Bytes für den IV

Beachten Sie, dass dies nicht unbedingt für andere Verschlüsselungsmodi gilt.

Für 20 Byte Eingabe benötigen Sie also insgesamt 48 Byte. Allerdings , kodieren Sie das Ergebnis auch base64, was mindestens 33 % mehr Speicherplatz benötigt (d. h. Sie sollten die rohen Bytes speichern, wenn Sie Wert auf Speicherplatz legen).

Vor dem Codieren sollte man immer verketten, sonst verschwendet man oft Platz mit mehreren Padding-Byte-Folgen. Wenn Ihre Eingabe 20 Bytes lang ist, erzeugt die Codierung des 32-Byte-Chiffretexts allein 44 Bytes und die Codierung des IV 24 Bytes (beide müssen aufgefüllt werden). Das Verketten vor dem Codieren erzeugt nur 64 Byte.

Das Verketten vor dem Codieren erfordert auch kein Trennzeichen, da die Länge des IV bekannt ist.

1 AEAD-Chiffren wie GCM sind im Allgemeinen CBC vorzuziehen, benötigen aber offensichtlich mehr Platz zum Speichern des Authentifizierungs-Hashs.