Java криптография генерирует переносимость ключа - PullRequest
1 голос
/ 12 октября 2010

В 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.

Есть какие-нибудь подсказки?

1 Ответ

1 голос
/ 12 октября 2010

Заполнение не имеет ничего общего с ключом.

Какой алгоритм заполнения вы указываете при создании Cipher?


Если вы буквально используете просто "AES" какалгоритм шифрования, вы должны быть явно о режиме и заполнении.В противном случае провайдер криптографии может свободно выбирать свои собственные настройки по умолчанию, и это может варьироваться от машины к машине.

...