sql >> Databasteknik >  >> RDS >> Mysql

Vilken längd måste jag ange för sträng krypterad med AES-256-CBC i databasen?

Blockstorleken för AES är 16 byte, så du behöver

  • storleken på din inmatning, avrundad uppåt till närmaste multipel av 16
  • plus, om indata redan är en multipel av 16, en blockstorlek för PKCS#5-utfyllnaden
  • plus 16 byte för IV

Observera att detta inte nödvändigtvis gäller för andra chifferlägen.

Så för 20 byte indata behöver du totalt 48 byte. Men , du base64-kodar också resultatet, vilket kräver minst 33 % mer utrymme (dvs. du bör lagra råbyte om du bryr dig om utrymme).

Du bör alltid sammanfoga före kodning, annars slösar du ofta utrymme med flera utfyllnadsbytesekvenser. Om din inmatning är 20 byte lång, ger kodning av chiffertexten på 32 byte i sig 44 byte, och kodning av IV ger 24 byte (båda behöver utfyllnad). Konkatenering före kodning ger endast 64 byte.

Sammanfogning före kodning kräver inte heller avgränsaren, eftersom längden på IV är känd.

1 AEAD-chiffer, som GCM, är i allmänhet att föredra framför CBC, men kräver mer utrymme för att lagra autentiserings-hash, så klart.




  1. SÄTT INGEN RÄKNING PÅ användning

  2. Oracle-leverantör för Oledb saknas i VS 2015 Shell

  3. Hur uppdaterar man en tabell automatiskt när en annan tabell uppdateras på en annan mysql-server?

  4. Relationsdatabaser