Frage

Ich fragte vor kurzem eine Frage zu Oracle-Verschlüsselung. Auf dem Weg, eine Lösung für mich zu finden, habe ich beschlossen, die Verschlüsselung (na ja, Verschleierung) auf der Anwendungsseite für bestimmte Aufgaben zu bewegen.

Mein Problem ist, dass die Datenbank bereits Daten, die eine bestimmte Art und Weise zu verschlüsseln und ich brauche Java-Code, um diese Funktionalität zu duplizieren, so dass der Text von einem System verschlüsselt wird, von den anderen und umgekehrt entschlüsselt werden.

Ich möchte die Verschlüsselung kompatibel sein mit dem, was die DB bereits tun, konnte aber in der Dokumentation nicht finden, das beschreibt genau das, was Oracle tut. Wie replizieren ich das in Java?

dbms_obfuscation_toolkit.DESEncrypt(
  input_string => v_string,
  key_string => key_string,
  encrypted_string => encrypted_string );
RETURN UTL_RAW.CAST_TO_RAW(encrypted_string);

Egal, was ich versuche, so scheint es, als ob die Java-DES-Verschlüsselung als Oracle unterscheidet.

War es hilfreich?

Lösung

Ich fand das funktioniert:

KeySpec ks = new DESKeySpec(new byte[] {'s','e','c','r','e','t','!','!'});
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey sk = skf.generateSecret(ks);
Cipher c = Cipher.getInstance("DES/CBC/NoPadding");
IvParameterSpec ips = new IvParameterSpec(new byte[] {0,0,0,0,0,0,0,0});
c.init(Cipher.ENCRYPT, sk, ips);
// or
c.init(Cipher.DECRYPT, sk, ips);

Das fehlende Stück war der Initialisierungsvektor (ips), die 8 Nullen sein müssen. Wenn Sie in Java null verwenden erhalten Sie etwas anderes.

Andere Tipps

Java in der Datenbank eines anderen Ansatz gewesen wäre, das würde (soll!) Guarenteed hat, dass der Code (und damit Ergebnisse) identisch sein würden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top