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?

Fournisseurs que vous avez installé sur le serveur? 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