Ho del testo crittografato e memorizzato in un db utilizzando PBE AES_256
. Inizialmente è stato fatto usando java 1.8.0_65
. Dopo l'aggiornamento all'ultima versione di Java, non posso più decodificare questi campi. Ho individuato l'incompatibilità con 1.8.0_71
. Le note di rilascio precisano seguente:PBE Crittografia AES_256 incompatibile tra java 8 u65 e u71
Problemi con algoritmi PBE utilizzando AES cripto corretto un errore è stato corretto per PBE utilizzando 256-bit cifrari AES tale che la chiave derivata può essere diverso e non equivalenti ai tasti precedentemente derivati dal la stessa password JDK-8.138.589 (non pubblica)
Così assumere devo migrare tali valori di campo 'manualmente', decifrando con la vecchia versione, memorizzare il valore normale e successivamente ri-cifrare con la versione corrente. C'è un modo migliore per farlo o mi manca forse qualcosa riguardo questa incompatibilità?
Ecco parte del codice che viene utilizzato per la crittografia:
SecretKey keyFromPassword =
SecretKeyFactory.getInstance(
algorithm).generateSecret(
new PBEKeySpec(password.toCharArray()));
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE, keyFromPassword, new PBEParameterSpec(
salt, iterations, new IvParameterSpec(iv)));
IOUtils.copyLarge(new CipherInputStream(clearStream, cipher), encryptedStream);
Soluzione sono stato in grado di decifrare i valori esistenti facendo qualche magia riflessione sulla mia cifra e ri-inizializzazione. Ecco il codice se qualcuno è interessato:
Object spi = ReflectionTestUtils.getField(cipher, "spi");
ReflectionTestUtils.setField(spi, "keyLength", 128);
cipher.init(Cipher.DECRYPT_MODE, keyFromPassword, new PBEParameterSpec(
salt, iterations, new IvParameterSpec(iv)));
sarebbe meglio se si pubblica la soluzione come risposta – spirit