문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
database:oracle:dbms_crypto [2020/08/11 14:07] kwon37xi [Oracle 암호화 -> Java 복호화] |
database:oracle:dbms_crypto [2020/08/11 16:49] (현재) kwon37xi [Oracle 암호화 -> Java 복호화] |
||
---|---|---|---|
줄 16: | 줄 16: | ||
-- grant execute on dbms_obfuscation_toolkit to public; | -- grant execute on dbms_obfuscation_toolkit to public; | ||
</ | </ | ||
+ | |||
+ | ===== 함수 ===== | ||
+ | * '' | ||
+ | * '' | ||
===== DBMS_CRYOPTO 상수 읽기 ===== | ===== DBMS_CRYOPTO 상수 읽기 ===== | ||
줄 21: | 줄 25: | ||
<code sql> | <code sql> | ||
- | begin | + | begin |
- | | + | dbms_output.put_line(dbms_crypto.DES_CBC_PKCS5); |
- | | + | end; |
- | / | + | / |
</ | </ | ||
줄 45: | 줄 49: | ||
===== Oracle 암호화 -> Java 복호화 ===== | ===== Oracle 암호화 -> Java 복호화 ===== | ||
+ | * Oracle은 표준 암호화를 사용하기 때문에 표준을 이해하면 Java 전환이 어렵지 않다. | ||
+ | * [[https:// | ||
+ | |||
<code sql> | <code sql> | ||
+ | |||
+ | -- byte 배열(RAW) 결과 | ||
select DBMS_CRYPTO.encrypt(UTL_RAW.CAST_TO_RAW (' | select DBMS_CRYPTO.encrypt(UTL_RAW.CAST_TO_RAW (' | ||
, UTL_RAW.CAST_TO_RAW (' | , UTL_RAW.CAST_TO_RAW (' | ||
+ | |||
+ | -- VARCHAR2 로 cast 하면 hex 문자열이 나온다. | ||
+ | SELECT CAST(DBMS_CRYPTO.encrypt(UTL_RAW.CAST_TO_RAW (' | ||
+ | -- 결과 : 963C9ABD5C20382996DF9E0849F28C45 | ||
</ | </ | ||
* '' | * '' | ||
* 유니코드의 경우 '' | * 유니코드의 경우 '' | ||
+ | * 유니코드에서 RAW(byte[])를 다시 문자열로 변경은 '' | ||
* '' | * '' | ||
* '' | * '' | ||
줄 59: | 줄 73: | ||
public void testDecryption() { | public void testDecryption() { | ||
String CIPHER = " | String CIPHER = " | ||
- | byte[] key = DatatypeConverter.parseHexBinary(" | + | |
+ | | ||
byte[] value = | byte[] value = | ||
- | | + | |
String INIT_VECTOR = | String INIT_VECTOR = | ||
new String(DatatypeConverter.parseHexBinary(" | new String(DatatypeConverter.parseHexBinary(" | ||
줄 87: | 줄 102: | ||
e.printStackTrace(); | e.printStackTrace(); | ||
} | } | ||
- | System.out.println(" | + | System.out.println(" |
} | } | ||
+ | </ | ||
+ | * Java 에서는 '' | ||
+ | * Java 에서는 hex 를 byte 배열 로 다시 변환하려면 '' | ||
+ | * 반대로 Java 에서 byte 배열을 hex 로 변환하기 - [[https:// | ||
+ | |||
+ | <code sh> | ||
+ | byte bytes[] = {(byte)0, (byte)0, (byte)134, (byte)0, (byte)61}; | ||
+ | String hex = javax.xml.bind.DatatypeConverter.printHexBinary(bytes); | ||
+ | |||
+ | // 혹은 apache commons codec | ||
+ | import org.apache.commons.codec.binary.Hex; | ||
+ | ... | ||
+ | Hex.encodeHexString(someByteArray)); | ||
</ | </ | ||
===== 참조 ===== | ===== 참조 ===== | ||
줄 94: | 줄 122: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
- | * [[https:// | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// |