2010-10-12 18 views
1

En Java, je générer et sérialisation une clé symétrique pour le chiffrement:Java cryptographie généré portabilité clé

KeyGenerator keyGen = KeyGenerator.getInstance(algorithm); 
    SecretKey symmetricKey = keyGen.generateKey(); 
    Base64.encode(symmetricKey.getEncoded(), new FileOutputStream(filename));  

où base64 est du package de cryptographie bouncycastle et de l'algorithme AES est.

La clé, lorsqu'elle est utilisée avec Oracle (Sun) JVM 1.6.0_21, fonctionne parfaitement, par exemple Windows vers Linux (même entre des systèmes d'exploitation 32/64 bits).

Sous OS X (Intel), avec la JVM d'Apple, la clé est chargée sans exception mais chaque chaîne cryptée sous Windows ou Linux génère une exception BadPaddingException.

Une chaîne est codé avec le code suivant:

Cipher cipher = Cipher.getInstance(algorithm, "BC"); 
    cipher.init(Cipher.ENCRYPT_MODE, secretKey); 
    encryptedString = new String(Base64.encode(cipher.doFinal(string.getBytes()))); 

où l'algorithme est AES.

Des indices?

Répondre

1

Le rembourrage n'a rien à voir avec la clé.

Quel algorithme de remplissage spécifiez-vous lors de la création du Cipher?


Si vous utilisez littéralement « AES », comme l'algorithme de chiffrement, vous devez être explicite sur le mode et le rembourrage. Dans le cas contraire, le fournisseur de chiffrement est libre de choisir son propre défaut, ce qui peut varier d'une machine à l'autre.

+0

J'ai ajouté le code de chiffrement à mon message d'origine. –