Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é o comprimento que devo especificar para a string criptografada com AES-256-CBC no banco de dados?


O tamanho do bloco do AES é de 16 bytes, então você precisará
  • o tamanho da sua entrada, arredondado para o múltiplo de 16 mais próximo
  • além disso, se a entrada já for um múltiplo de 16, um tamanho de bloco para o preenchimento PKCS#5
  • mais 16 bytes para o IV

Observe que isso não se aplica necessariamente a outros modos de cifra.

Portanto, para 20 bytes de entrada, você precisará de um total de 48 bytes. No entanto , você também está codificando o resultado em base64, o que requer pelo menos 33% mais espaço (ou seja, você deve armazenar os bytes brutos se quiser espaço).

Você deve sempre concatenar antes de codificar, caso contrário, muitas vezes você desperdiça espaço com várias sequências de bytes de preenchimento. Se sua entrada tiver 20 bytes, codificar o texto cifrado de 32 bytes por si só produz 44 bytes e codificar o IV produz 24 bytes (ambos precisam de preenchimento). Concatenar antes da codificação produz apenas 64 bytes.

A concatenação antes da codificação também não requer o delimitador, pois o comprimento do IV é conhecido.

1 As cifras AEAD, como o GCM, geralmente são preferíveis ao CBC, mas exigem mais espaço para armazenar o hash de autenticação, obviamente.