문제

최근 Oracle 암호화에 관해 질문을 했습니다.스스로 솔루션을 찾는 과정에서 특정 작업을 위해 암호화(음, 난독화)를 애플리케이션 측면으로 옮기기로 결정했습니다.

내 문제는 데이터베이스가 이미 특정 방식으로 데이터를 암호화하고 있으며 해당 기능을 복제하려면 Java 코드가 필요하므로 한 시스템에서 암호화된 텍스트를 다른 시스템에서 해독할 수 있고 그 반대의 경우도 마찬가지라는 것입니다.

DB가 이미 수행하고 있는 작업과 암호화가 호환되기를 원하지만 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의 암호화와 다른 것 같습니다.

도움이 되었습니까?

해결책

나는 이것이 효과가 있다는 것을 알았습니다.

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

누락된 부분은 8개의 0이어야 하는 초기화 벡터(ips)였습니다.Java에서 null을 사용하면 뭔가 다른 결과가 나타납니다.

다른 팁

데이터베이스에서 Java를 사용하는 것은 코드(및 결과)가 동일함을 보장하는 또 다른 접근 방식이었을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top