사용자 도구

사이트 도구


database:oracle:dbms_crypto

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
database:oracle:dbms_crypto [2020/08/11 14:33]
kwon37xi [함수]
database:oracle:dbms_crypto [2020/08/11 16:49] (현재)
kwon37xi [Oracle 암호화 -> Java 복호화]
줄 18: 줄 18:
  
 ===== 함수 ===== ===== 함수 =====
-  * ''DBMS_CRYPTO.ENCRYPT'' : 암호화 수행. 암호화 데이터 인자로 byte 배열(RAW)를 받음. hex 문자열 반환.+  * ''DBMS_CRYPTO.ENCRYPT'' : 암호화 수행. 암호화 데이터 인자로 byte 배열(RAW)를 받음. byte 배(RAW) 반환.
   * ''DBMS_CRYPTO.DECRYPT'' : 복호화 수행. 복호화 데이터 인자로 hex 문자열 받음. byte 배열(RAW) 반환.   * ''DBMS_CRYPTO.DECRYPT'' : 복호화 수행. 복호화 데이터 인자로 hex 문자열 받음. byte 배열(RAW) 반환.
  
줄 25: 줄 25:
  
 <code sql> <code sql>
- begin +begin 
-   dbms_output.put_line(dbms_crypto.DES_CBC_PKCS5); +    dbms_output.put_line(dbms_crypto.DES_CBC_PKCS5); 
- end; +end; 
- /+/
 </code> </code>
  
줄 49: 줄 49:
  
 ===== Oracle 암호화 -> Java 복호화 ===== ===== Oracle 암호화 -> Java 복호화 =====
 +  * Oracle은 표준 암호화를 사용하기 때문에 표준을 이해하면 Java 전환이 어렵지 않다.
 +  * [[https://www.esentri.com/oracle-dbms_crypto-to-java-the-first-steps/|Oracle DBMS_Crypto to Java: The First Steps - esentri AG]] : Java <-> Oracle 상호간 암호화/복호화에 대한 기본 이론. 
 +
 <code sql> <code sql>
 +
 +-- byte 배열(RAW) 결과
 select DBMS_CRYPTO.encrypt(UTL_RAW.CAST_TO_RAW ('Secret Data'), 4353 select DBMS_CRYPTO.encrypt(UTL_RAW.CAST_TO_RAW ('Secret Data'), 4353
 , UTL_RAW.CAST_TO_RAW ('MYKEY123'),UTL_RAW.CAST_TO_RAW('01234567')) from dual; , UTL_RAW.CAST_TO_RAW ('MYKEY123'),UTL_RAW.CAST_TO_RAW('01234567')) from dual;
 +
 +-- VARCHAR2 로 cast 하면 hex 문자열이 나온다.
 +SELECT CAST(DBMS_CRYPTO.encrypt(UTL_RAW.CAST_TO_RAW ('Secret Data'), 4353, UTL_RAW.CAST_TO_RAW ('MYKEY123'),UTL_RAW.CAST_TO_RAW('01234567')) AS VARCHAR2(100)) FROM dual;
 +-- 결과 : 963C9ABD5C20382996DF9E0849F28C45
 </code> </code>
   * ''UTL_RAW.CAST_TO_RAW ('Secret Data')'' 암호화할 데이터(''Secret Data'')를 binary로   * ''UTL_RAW.CAST_TO_RAW ('Secret Data')'' 암호화할 데이터(''Secret Data'')를 binary로
줄 64: 줄 73:
 public void testDecryption() { public void testDecryption() {
   String CIPHER = "DES/CBC/PKCS5Padding";   String CIPHER = "DES/CBC/PKCS5Padding";
-  byte[] key = DatatypeConverter.parseHexBinary("4D594B4559313233");+   
 +  byte[] key = DatatypeConverter.parseHexBinary("4D594B4559313233"); // "MYKEY123".getBytes("UTF-8") 와 같다.
   byte[] value =   byte[] value =
-     DatatypeConverter.parseHexBinary("24FC80D150E224F2E8CE83229F38B607ADAF312BCB1B4A55");+     DatatypeConverter.parseHexBinary("963C9ABD5C20382996DF9E0849F28C45"); // 암호화 결과의 hex 
   String INIT_VECTOR =   String INIT_VECTOR =
      new String(DatatypeConverter.parseHexBinary("3031323334353637"));      new String(DatatypeConverter.parseHexBinary("3031323334353637"));
줄 92: 줄 102:
     e.printStackTrace();     e.printStackTrace();
   }   }
-  System.out.println("Result " + result);+  System.out.println("Result " + result); //   Result Secret Data
 } }
 </code> </code>
줄 112: 줄 122:
   * [[http://kkujunhee.net/bbs/board.php?bo_table=db&wr_id=49|DBMS_CRYPTO 암호화 라이브러리 추가하기 > 데이터베이스 | kkujunhee.net]]   * [[http://kkujunhee.net/bbs/board.php?bo_table=db&wr_id=49|DBMS_CRYPTO 암호화 라이브러리 추가하기 > 데이터베이스 | kkujunhee.net]]
   * [[http://www.gurubee.net/lecture/1200|오라클에서의 데이터 암호화 기능]]   * [[http://www.gurubee.net/lecture/1200|오라클에서의 데이터 암호화 기능]]
-  * [[https://www.esentri.com/oracle-dbms_crypto-to-java-the-first-steps/|Oracle DBMS_Crypto to Java: The First Steps - esentri AG]] : Java <-> Oracle 상호간 암호화/복호화 
   * [[https://dzone.com/articles/data-encryptiondecryption-with-oracle|Data Encryption and Decryption With Oracle - DZone Database]]   * [[https://dzone.com/articles/data-encryptiondecryption-with-oracle|Data Encryption and Decryption With Oracle - DZone Database]]
   * [[https://www.programcreek.com/java-api-examples/javax.crypto.Cipher|Java Code Examples for javax.crypto.Cipher]]   * [[https://www.programcreek.com/java-api-examples/javax.crypto.Cipher|Java Code Examples for javax.crypto.Cipher]]
database/oracle/dbms_crypto.1597124032.txt.gz · 마지막으로 수정됨: 2020/08/11 14:33 저자 kwon37xi