web-dev-qa-db-fra.com

AES / CBC / PKCS5Padding vs AES / CBC / PKCS7Padding avec 256 performances de taille de clé java

J'utilise actuellement AES/CBC/PKCS5Padding pour crypter les fichiers en Java avec 256 octets taille de clé, mais lors de la recherche, j'ai trouvé sur stackexchange PKCS # 5-PKCS # 7 Padding et il est mentionné,

Le remplissage PKCS # 5 est un sous-ensemble du remplissage PKCS # 7 pour les tailles de bloc de 8 octets

Donc je veux savoir

  1. La performance de AES/CBC/PKCS7Padding sera mieux que AES/CBC/PKCS5Padding pour la configuration ci-dessus?
  2. Comment pouvons-nous configurer la taille du bloc dans Java comme il est mentionné

    Le remplissage PKCS # 7 fonctionnerait pour toute taille de bloc de 1 à 255 octets.

Mon exemple de code est,

SecureRandom rnd = new SecureRandom();
IvParameterSpec iv = new IvParameterSpec(rnd.generateSeed(16));

KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(256);
SecretKey k = generator.generateKey();

Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, k, iv);
21
dbw

La taille de bloc est une propriété de l'algorithme de chiffrement utilisé. Pour AES, il s'agit toujours de 16 octets.

Donc, strictement parlant, PKCS5Padding ne peut pas être utilisé avec AES car il est défini uniquement pour une taille de bloc de 8 octets. Je suppose que AES/CBC/PKCS5Padding est interprété comme AES/CBC/PKCS7Padding en interne.

La seule différence entre ces schémas de remplissage est que PKCS7Padding a la taille de bloc comme paramètre, tandis que pour PKCS5Padding, il est fixé à 8 octets. Lorsque la taille de bloc est de 8 octets, ils font exactement la même chose.

33
Henry