В Java я генерирую и сериализую симметричный ключ для целей шифрования:
KeyGenerator keyGen = KeyGenerator.getInstance(algorithm);
SecretKey symmetricKey = keyGen.generateKey();
Base64.encode(symmetricKey.getEncoded(), new FileOutputStream(filename));
где Base64 из пакета криптографии Bouncycastle и алгоритм AES.
Ключ, при использовании с Oracle (Sun) JVM 1.6.0_21, отлично работает при переносе, например, с Windows на Linux (даже между 32/64 битными ОС).
В OS X (Intel) с JVM от Apple ключ загружается без исключения, но каждая строка, зашифрованная в Windows или Linux, генерирует исключение BadPaddingException.
Строка закодирована следующим кодом:
Cipher cipher = Cipher.getInstance(algorithm, "BC");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
encryptedString = new String(Base64.encode(cipher.doFinal(string.getBytes())));
где алгоритм AES.
Есть какие-нибудь подсказки?