java.security.InvalidKeyException: taille de clé illégale
Lorsque j'exécute ce code Android, et il ne produit pas d'erreur, mais lorsque je le lance au standard d'un programme Java, il produit de l'exception: java.de sécurité.InvalidKeyException: Illégal de la taille de la clé.
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(CHUNK_ENCRYPTION_KEY.getBytes(), 0, 32, "AES");
IvParameterSpec initVector = new IvParameterSpec(AES_INITIALIZATION_VECTOR.getBytes(), 0 , 16);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, initVector);
CHUNK_ENCRYPTION_KEY est de 32 octets de la clé codée en dur dans le programme.
AES_INITIALIZATION_VECTOR est de 16 octets codés en dur vecteur d'initialisation.
Personne ne sait pourquoi il faudrait travailler sur Android et pas sur un ordinateur de Bureau?
source d'informationauteur Hank
Vous devez vous connecter pour publier un commentaire.
Sur un bureau par défaut de la JVM de l'installation (à l'aide de la JRE ou JDK de Sun/Oracle), l'AES est limité à 128 bits, la taille de la clé. C'est un vestige de l'import/export des lois sur les logiciels de cryptographie. Pour déverrouiller le plus grand AES tailles de clé, vous avez besoin de télécharger et d'appliquer la "JCE Force Illimitée de la Compétence de la Politique de Fichiers" (voir au bas de cette page).
La taille de la clé restriction est imposée par le code à l'intérieur de la
Cipher
classe. Changer de fournisseurs de services cryptographiques (par exemple, à l'un des Château Gonflable ou du IAIK fournisseurs) ne vous laisseront pas de contourner cette restriction.Sur une autre note, vous ne voulez pas utiliser le raw
getBytes()
méthode sur unString
car le résultat dépend de la locale courante (pas tout le monde utilise l'UTF-8 ou même compatible ASCII encodages). Si vous ne voulez représenter votre clé comme une chaîne littérale, à moins d'utiliser un codage explicite, tels que:CHUNK_ENCRYPTION_KEY.getBytes("UTF-8")
Il n'est pas clairement indiqué dans le README que "la JCE Force Illimitée de la Compétence de la Politique de Fichiers" doit être copié dans le jre à l'intérieur de votre JDK, sinon cela ne fonctionnera pas. Chemin d'accès pour les fichiers doivent être: /chemin/vers/jdk1.7.0_xx/jre/lib/security
Peut-être que votre CLÉ fournie et Vecteur d'Initialisation n'ont pas de 32 octets, respectivement de 16 octets de longueur. Vous pouvez également essayer d'utiliser les constructeurs qui ne prennent pas les paramètres de l'offset et de la longueur des clés: