sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la longitud que debo especificar para la cadena cifrada con AES-256-CBC en la base de datos?

El tamaño de bloque de AES es de 16 bytes, por lo que necesitará

  • el tamaño de su entrada, redondeado al múltiplo de 16 más cercano
  • además, si la entrada ya es un múltiplo de 16, un tamaño de bloque para el relleno PKCS#5
  • más 16 bytes para el IV

Tenga en cuenta que esto no se aplica necesariamente a otros modos de cifrado.

Entonces, para 20 bytes de entrada, necesitará un total de 48 bytes. Sin embargo , también está codificando en base64 el resultado, lo que requiere al menos un 33 % más de espacio (es decir, debe almacenar los bytes sin procesar si le preocupa el espacio).

Siempre debe concatenar antes de codificar, de lo contrario, a menudo desperdiciará espacio con múltiples secuencias de bytes de relleno. Si su entrada tiene una longitud de 20 bytes, la codificación del texto cifrado de 32 bytes por sí mismo produce 44 bytes, y la codificación del IV produce 24 bytes (ambos necesitan relleno). Concatenar antes de codificar produce solo 64 bytes.

Concatenar antes de codificar tampoco requiere el delimitador, porque se conoce la longitud del IV.

1 Los cifrados AEAD, como GCM, generalmente son preferibles a CBC, pero obviamente requieren más espacio para almacenar el hash de autenticación.