开发者

Java cryptography generated key portability

In Java, I'm generating and serializing a symmetric key for encryption purposes:

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

where Base64 is from the Bouncycastle cryptography package and algorithm is AES.

The key, when used with Oracle (Sun) JVM 1.6.0_21, works perfectly is moved from, e.i, Windows to Linux (ev开发者_开发知识库en between 32/64 bits OSs).

On OS X (Intel), with Apple's JVM, the key is loaded without exception but every string encrypted on Windows or Linux generates a BadPaddingException.

A string is encoded with the following code:

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

where algorithm is AES.

Any clues?


Padding has nothing to do with the key.

What padding algorithm are you specifying when creating the Cipher?


If you are literally using just "AES" as the cipher algorithm, you should be explicit about the mode and padding. Otherwise, the crypto provider is free to choose some default of its own, and that's likely to vary from machine to machine.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜