Java AES: Pas installé fournisseur prend en charge cette clé: javax.crypto.spec.SecretKeySpec
Je suis en train de configurer 128 bits de cryptage AES, et j'obtiens une exception levée sur mon Chiffre.init:
No installed provider supports this key: javax.crypto.spec.SecretKeySpec
Je suis de la génération de la Clé sur le côté client en utilisant le code suivant:
private KeyGenerator kgen;
try {
kgen = KeyGenerator.getInstance("AES");
} catch (NoSuchAlgorithmException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
kgen.init(128);
}
SecretKey skey = kgen.generateKey();
Cette clé est ensuite transmis au serveur en tant qu'en-tête. il est encodé en Base64 à l'aide de cette fonction:
public String secretKeyToString(SecretKey s) {
Base64 b64 = new Base64();
byte[] bytes = b64.encodeBase64(s.getEncoded());
return new String(bytes);
}
Le serveur tire la tête, et ne
protected static byte[] encrypt(byte[] data, String base64encodedKey) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher;
try {
cipher = Cipher.getInstance("AES");
} catch (NoSuchAlgorithmException ex) {
//log error
} catch (NoSuchPaddingException ex) {
//log error
}
SecretKey key = b64EncodedStringToSecretKey(base64encodedKey);
cipher.init(Cipher.ENCRYPT_MODE, key); //THIS IS WHERE IT FAILS
data = cipher.doFinal(data);
return data;
}
private static SecretKey b64EncodedStringToSecretKey(String base64encodedKey) {
SecretKey key = null;
try {
byte[] temp = Base64.decodeBase64(base64encodedKey.getBytes());
key = new SecretKeySpec(temp, SYMMETRIC_ALGORITHM);
} catch (Exception e) {
//Do nothing
}
return key;
}
De débogage, j'ai mis des points d'arrêt après la génération de la clé sur le côté client, et juste avant le chiffrement.init sur le côté serveur. Selon Netbeans, les octets qui composent le SecretKeys sont identiques et sont d'une longueur de 16 octets (En fait, aussi loin que je peux dire, les objets sont identiques).
Je suis conscient de la force illimitée de la JCE de trucs, mais je ne suis pas sous l'impression que j'ai besoin de 128 bits AES.
Côté Client: java version "1.6.0_26"
Côté serveur: java version "1.6.0_20"
Des Idées?
for (Provider p : Security.getProviders()) System.out.println(p.getName());
Aussi, quelle est la définition de
SYMMETRIC_ALGORITHM
?Flûte de merde, j'ai essayé de remplacer le SYMMETRIC_ALGORITHM cordes. Elles sont définitives des Chaînes définies (à la fois sur le serveur et le client) comme "AES". Je vais essayer le fournisseur de code que vous m'avez montré et de revenir à vous
Sortie:
SUN SunRsaSign SunJSSE SunJCE SunJGSS SunSASL XMLDSig SunPCSC SunPKCS11-NSS
Avez-vous installé les fichiers de stratégie pour un nombre illimité de chiffrement à partir d'Oracle? Pouvez-vous essayer avec les installer?
OriginalL'auteur Cody S | 2011-12-02
Vous devez vous connecter pour publier un commentaire.
J'ai exécuter votre code de manières différentes, avec: Java 1.{5,6,7} (à l'aide d'AES); différents Base64 codecs (Apache Commons Codec, DatatypeConverted, Base64); jeux de caractères différents; entre les différentes machines virtuelles java (par le biais de prises de courant) ... en vain. Je n'ai pas d'erreurs.
Pour cerner le problème, vous pouvez exécuter le code suivant sur les deux se termine?
(je sais que vous l'avez mentionné le JDK versions que vous utilisez et de trucs, mais il ne peut pas nuire.)
Étant donné que la clé n'est pas d'obtenir endommagé lorsque vous transférer à partir du serveur vers le client (ou peut-être dans le sens inverse), alors si:
Dans tous les cas, si une erreur est levée, s'il vous plaît poster le ensemble trace de la pile quelque part. L'erreur
No installed provider supports this key: javax.crypto.spec.SecretKeySpec
ne nous dit rien (au moins pour moi ça ne marche pas, et je ne pouvais pas reproduire cette erreur).Vous avez aussi oublié le fait que vous avez déjà fait une réponse semblable à cela dans la section commentaire de la question. 😀 Pas trop grave tho'!
OriginalL'auteur Kohányi Róbert
Cette erreur peut indiquer que vous avez besoin d'installer JCE (Java Cryptography Extension).
Télécharger ce fichier (ou version plus récente) et de copier les bocaux à JDK_FOLDER/jre/lib/security
http://www.oracle.com/technetwork/pt/java/javase/downloads/jce-6-download-429243.html
OriginalL'auteur Renato Figueiredo
Cette erreur qui se passe avec moi, en fournissant une clé incorrecte à
SecretKeySpec
constructeur.OriginalL'auteur Ahmed Ashour