以下のコードがあります。 Oracle 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で直接実行できますか?
Oracle 12cでは、関数 STANDARD_HASH を使用できます。追加の特権は必要ありません。
select standard_hash('foo', 'MD5') from dual;
Dbms_obfuscation_toolkitは非推奨です(注 here を参照)。 DBMS_CRYPTOを直接使用できます。
select rawtohex(
DBMS_CRYPTO.Hash (
UTL_I18N.STRING_TO_RAW ('foo', 'AL32UTF8'),
2)
) from dual;
出力:
ACBD18DB4CC2F85CEDEF654FCCC4A4D8
必要に応じて、より低い関数呼び出しを追加します。 DBMS_CRYPTO の詳細。
私はやります:
select DBMS_CRYPTO.HASH(rawtohex('foo') ,2) from dual;
出力:
DBMS_CRYPTO.HASH(RAWTOHEX('FOO'),2)
--------------------------------------------------------------------------------
ACBD18DB4CC2F85CEDEF654FCCC4A4D8
@ user755806あなたの質問に答えられたとは思わない。私はあなたのコードを取りましたが、「foo」のサンプル文字列を使用し、より低い関数を追加し、返されたハッシュの長さも見つけました。 sqlplusまたはOracleのsql developerでは、Javaデータベースクライアントを使用して、値の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
linux md5sumコマンドから返される値と同じです。
echo -n foo | md5sum
acbd18db4cc2f85cedef654fccc4a4d8 -
コンテンツを暗黙的に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)));