복붙노트

[SQL] 어떻게 오라클 MD5 해시 함수를 호출하는 방법?

SQL

어떻게 오라클 MD5 해시 함수를 호출하는 방법?

나는 코드 아래에 있습니다. 나는 오라클 11g를 사용하고 있습니다.

SELECT DBMS_OBFUSCATION_TOOLKIT.md5 (input => UTL_RAW.cast_to_raw(
  FIRST_NAME
  ||LAST_NAME
  )) md5_key ,
  FIRST_NAME ,
  LAST_NAME
FROM C_NAME_TAB
WHERE PKEY='1234'

어떻게 내가이 코드를 호출 할 수 있습니다? 내가 직접 sqldeveloper에서이 코드를 실행할 수 있습니까?

해결법

  1. ==============================

    1.오라클 12C에서는 함수 STANDARD_HASH을 사용할 수 있습니다. 그것은 추가 권한이 필요하지 않습니다.

    오라클 12C에서는 함수 STANDARD_HASH을 사용할 수 있습니다. 그것은 추가 권한이 필요하지 않습니다.

    select standard_hash('foo', 'MD5') from dual;
    

    DBMS_OBFUSCATION_TOOLKIT (여기서는 주 참조)되지 않습니다. 직접 DBMS_CRYPTO을 사용할 수 있습니다 :

    select rawtohex(
        DBMS_CRYPTO.Hash (
            UTL_I18N.STRING_TO_RAW ('foo', 'AL32UTF8'),
            2)
        ) from dual;
    

    산출:

    ACBD18DB4CC2F85CEDEF654FCCC4A4D8
    

    필요한 경우 낮은 함수 호출을 추가합니다. DBMS_CRYPTO에 대한 자세한.

  2. ==============================

    2.난 그럴거야:

    난 그럴거야:

    select DBMS_CRYPTO.HASH(rawtohex('foo') ,2) from dual;
    

    산출:

    DBMS_CRYPTO.HASH(RAWTOHEX('FOO'),2)
    --------------------------------------------------------------------------------
    ACBD18DB4CC2F85CEDEF654FCCC4A4D8
    
  3. ==============================

    3.@ user755806 나는 귀하의 질문에 대답하고 있다고 생각하지 않습니다. 난 당신의 코드를했다하지만 낮은 기능을 추가 한 'foo는'예 문자열을 사용하며 반환 된 해시의 길이를 발견했다. SQLPLUS 또는 오라클의 SQL 개발자 자바 데이터베이스 클라이언트에서는 값의 md5sum를 호출이 사용할 수 있습니다. 열 형식은 프리젠 테이션을 정리.

    @ user755806 나는 귀하의 질문에 대답하고 있다고 생각하지 않습니다. 난 당신의 코드를했다하지만 낮은 기능을 추가 한 'foo는'예 문자열을 사용하며 반환 된 해시의 길이를 발견했다. SQLPLUS 또는 오라클의 SQL 개발자 자바 데이터베이스 클라이언트에서는 값의 md5sum를 호출이 사용할 수 있습니다. 열 형식은 프리젠 테이션을 정리.

    column hash_key format a34;
    column hash_key_len format 999999;
    select dbms_obfuscation_toolkit.md5(
              input => UTL_RAW.cast_to_raw('foo')) as hash_key,
           length(dbms_obfuscation_toolkit.md5(
              input => UTL_RAW.cast_to_raw('foo'))) as hash_key_len
     from dual;
    

    결과 집합

    HASH_KEY                           HASH_KEY_LEN
    ---------------------------------- ------------
    acbd18db4cc2f85cedef654fccc4a4d8             32
    

    리눅스 md5sum이 명령에서 반환 된 같은 값입니다.

    echo -n foo | md5sum
    acbd18db4cc2f85cedef654fccc4a4d8  -
    
  4. ==============================

    4.암시 적으로 AL32UTF8에 내용을 레코딩하지 않고 내 원하는 인코딩으로 CLOB 콘텐츠 분야의 MD5 해시를 계산하려면,이 코드를 사용했습니다 :

    암시 적으로 AL32UTF8에 내용을 레코딩하지 않고 내 원하는 인코딩으로 CLOB 콘텐츠 분야의 MD5 해시를 계산하려면,이 코드를 사용했습니다 :

    create or replace function clob2blob(AClob CLOB) return BLOB is
      Result BLOB;
      o1 integer;
      o2 integer;
      c integer;
      w integer;
    begin
      o1 := 1;
      o2 := 1;
      c := 0;
      w := 0;
      DBMS_LOB.CreateTemporary(Result, true);
      DBMS_LOB.ConvertToBlob(Result, AClob, length(AClob), o1, o2, 0, c, w);
      return(Result);
    end clob2blob;
    /
    
    update my_table t set t.hash = (rawtohex(DBMS_CRYPTO.Hash(clob2blob(t.content),2)));
    
  5. from https://stackoverflow.com/questions/22533037/how-to-call-oracle-md5-hash-function by cc-by-sa and MIT license