Ich habe einige Text verschlüsselt und in einem db mit PBE AES_256
gespeichert. Dies wurde zunächst mit Java 1.8.0_65
gemacht. Nach dem Upgrade auf das neueste Java kann ich diese Felder nicht mehr entschlüsseln. Ich habe die Inkompatibilität auf 1.8.0_71
lokalisiert. Die Release-Informationen angeben, die folgenden:PBE AES_256 Verschlüsselung inkompatibel zwischen Java 8 u65 und U71
Problem PBE Algorithmen AES Krypto korrigiert einen Fehler für PBE korrigiert wurde unter Verwendung von 256-Bit-AES-Chiffren, so daß der abgeleitete Schlüssel verschieden sein können und nicht gleich Schlüssel zuvor von abgeleiteten das gleiche Passwort. JDK-8.138.589 (nicht öffentlich)
Also gehe ich davon brauche ich diese Feldwerte ‚manuell‘ migrieren, indem sie mit der alten Version zu entschlüsseln, die Ebene Wert zu speichern und anschließend wieder verschlüsselt mit der aktuellen Version. Gibt es einen besseren Weg, oder verpasse ich vielleicht etwas in Bezug auf diese Inkompatibilität?
Hier ist ein Teil des Codes, der für die Verschlüsselung verwendet wird:
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);
Lösung Ich war in der Lage, die vorhandenen Werte zu entschlüsseln, indem einige Überlegungen Magie auf meiner Chiffre und Reinitialisierung es zu tun. Hier ist der Code, wenn jemand interessiert ist:
Object spi = ReflectionTestUtils.getField(cipher, "spi");
ReflectionTestUtils.setField(spi, "keyLength", 128);
cipher.init(Cipher.DECRYPT_MODE, keyFromPassword, new PBEParameterSpec(
salt, iterations, new IvParameterSpec(iv)));
es wäre besser, wenn Sie Ihre Lösung als Antwort – spirit