Quelle est la taille de la clé pour PBEWithMD5AndTripleDES?

Je suis en train de remplacer PBEWithMD5AndDES avec PBEWithMD5AndTripleDES dans le code existant. Jusqu'à présent, je suis en utilisant le même mot de passe que j'utilisais avant, et la réception de cette Exception:

java.de sécurité.InvalidKeyException: Illégal de la taille de la clé

J'ai regardé en ligne et vu que le DES utilise une version 64 bits de la clé et de TripleDES utilise une clé de 128 bits. Je ne suis pas clair sur les détails de la façon dont mon mot de passe est utilisé pour générer une clé, et vous ne savez pas où chercher à comprendre ce entièrement. Mon mot de passe est de 260 caractères. J'ai essayé le doublement de la longueur, mais j'obtiens la même Exception.

Je suis de la génération d'un PBEKeySpec de mon mot de passe, avec 8 octets de sel et un nombre d'itérations de 12. Je vois qu'il y a un autre constructeur qui prend un keyLength argument, mais la documentation décrit comme "être issu," et je ne comprends pas. J'ai dans l'idée que j'ai besoin de modifier le nombre d'itérations et/ou la fourniture d'un keyLength argument, mais je ne veux pas juste faire aveuglément sans comprendre pleinement ce que je suis en train de faire.

Voici le schéma de base du code que j'utilise actuellement:

String passphrase = ...
byte[] salt = ...
int iterationCount = 12;
String algorithm = "PBEWithMD5AndTripleDES";
KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount);
SecretKey key = SecretKeyFactory.getInstance(algorithm).generateSecret(keySpec);
Cipher cipher = Cipher.getInstance(key.getAlgorithm());
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount);
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
byte[] encoded = cipher.doFinal(data);
  • TripleDES, ou plus précisément DESede utilise soit un DES ABA clé ou une DES touche ABC. Dans les 16 bits / 128 bits version, qui a une entropie de 112 bits et d'une longueur d'environ 80 bits, les 8 premiers octets sont la première touche (A), et les 8 octets sont la deuxième clé (B), puis DESede est C = E(Sa, D(Sb, E(Sa, le bloc de données))). Il est plus probable que Oracle utilise ABC clés (24 octets, 192 bits, 168 bits d'entropie, 128 bits efficace) car c'était le seul qu'ils ont pris en charge pour un certain temps. 16 octets clés donnerait un InvalidKeySize, ou un InvalidKeySpec exception, si je ne me trompe pas.
  • Juste une remarque: pensez à utiliser AES au lieu de (Triple)DES - il est à la fois plus rapide et considéré comme plus sûr.
InformationsquelleAutor skiphoppy | 2012-02-24