InvalidKeyException: не удается расшифровать строку, зашифрованную OpenJDK / JRE, с помощью Sun JRE - PullRequest
3 голосов
/ 27 сентября 2011

Я зашифровал и сохранил некоторые данные в БД с помощью OpenJDK JRE, а также успешно расшифровал с помощью OpenJDK при получении обратно из БД.

Сегодня я заменил OpenJDK JRE на Sun JRE, и теперь я получаю следующее исключениекогда я пытаюсь расшифровать старые (зашифрованные OpenJDK) данные:

java.security.InvalidKeyException: Illegal key size or default parameters
        at javax.crypto.Cipher.a(DashoA13*..)
        at javax.crypto.Cipher.a(DashoA13*..)
        at javax.crypto.Cipher.a(DashoA13*..)
        at javax.crypto.Cipher.init(DashoA13*..)
        at javax.crypto.Cipher.init(DashoA13*..)

В строке 14 возникает исключение:

// Decrypts the given ciphertext with the given password
public String decrypt(String ciphertext, String password)
    throws FailedCryptOperationException {
    String plaintext = "";
    byte[] ciphertext_bytes = decode(ciphertext);

    try {
        byte[] salt = decode(SALT_BASE64);
        SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); //$NON-NLS-1$
        KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 1024, 256);
        SecretKey tmp = factory.generateSecret(spec);
        SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES"); 
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, secret);
        plaintext = new String(cipher.doFinal(ciphertext_bytes), TEXT_FORMAT);
    } catch (Exception e) {
        throw new FailedCryptOperationException(e);
    }

    return plaintext;
}

// Does Base64 decoding
public byte[] decode(String text) throws FailedCryptOperationException {
    byte[] res;
    BASE64Decoder       decoder         = new BASE64Decoder();
    try {
        res = decoder.decodeBuffer(text);
    } catch (IOException e) {
        throw new FailedCryptOperationException(e);
    }
    return res;
}

В этой строке:

cipher.init(Cipher.DECRYPT_MODE, secret);

Оригинальная Sun JRE делает здесь что-то другое?Если да, как я могу обойти это?Если нет, то в чем проблема?

1 Ответ

4 голосов
/ 27 сентября 2011

Я думаю, что вам нужны расширения Java Unlimited JCE.
Загрузите и установите файлы политики безопасности (заменяя установленные) и скопируйте их в JDK и JRE в /lib/security.
Ссылка находится всайт загрузки Java Downloads

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...