Дублирование Oracle DES, шифрование в Java - PullRequest
1 голос
/ 22 сентября 2008

Я недавно задал вопрос о Oracle Encryption. На пути к поиску решения для себя я решил перенести шифрование (ну, запутывание) на сторону приложения для определенных задач.

Моя проблема в том, что база данных уже шифрует данные определенным образом, и мне нужен код Java для дублирования этой функции, чтобы текст, зашифрованный одной системой, мог быть расшифрован другой, и наоборот.

Я хочу, чтобы шифрование было совместимо с тем, что уже делала БД, но не смог найти документацию, которая точно описывает, что делает Oracle. Как мне воспроизвести это в 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);

Независимо от того, что я пытаюсь, похоже, что шифрование Java DES отличается от шифрования Oracle.

Ответы [ 2 ]

2 голосов
/ 22 сентября 2008

Я нашел это работает:

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);

Недостающим элементом был Вектор инициализации (ips), который должен составлять 8 нулей. Когда вы используете нуль в Java, вы получаете что-то другое.

0 голосов
/ 22 сентября 2008

Использование Java в базе данных было бы другим подходом, который (должен!) Гарантировал бы идентичность кода (и, следовательно, результатов).

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