Ich habe folgenden Code. Ich verwende 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'
Wie kann ich diesen Code anrufen? Kann ich diesen Code direkt in sqldeveloper ausführen?
In Oracle 12c können Sie die Funktion STANDARD_HASH verwenden. Es sind keine zusätzlichen Berechtigungen erforderlich.
select standard_hash('foo', 'MD5') from dual;
Das dbms_obfuscation_toolkit ist veraltet (siehe Hinweis hier ). Sie können DBMS_CRYPTO direkt verwenden:
select rawtohex(
DBMS_CRYPTO.Hash (
UTL_I18N.STRING_TO_RAW ('foo', 'AL32UTF8'),
2)
) from dual;
Ausgabe:
ACBD18DB4CC2F85CEDEF654FCCC4A4D8
Fügen Sie bei Bedarf einen niedrigeren Funktionsaufruf hinzu. Mehr zu DBMS_CRYPTO .
Ich würde tun:
select DBMS_CRYPTO.HASH(rawtohex('foo') ,2) from dual;
ausgabe:
DBMS_CRYPTO.HASH(RAWTOHEX('FOO'),2)
--------------------------------------------------------------------------------
ACBD18DB4CC2F85CEDEF654FCCC4A4D8
@ user755806 Ich glaube nicht, dass deine Frage beantwortet wurde. Ich habe Ihren Code genommen, aber den 'foo' Beispielstring verwendet, eine niedrigere Funktion hinzugefügt und auch die Länge des zurückgegebenen Hashes ermittelt. In sqlplus oder dem SQL-Entwickler-Java-Datenbankclient von Oracle können Sie dies verwenden, um die MD5-Summe eines Werts aufzurufen. Die Spaltenformate bereinigen die Präsentation.
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;
Die Ergebnismenge
HASH_KEY HASH_KEY_LEN
---------------------------------- ------------
acbd18db4cc2f85cedef654fccc4a4d8 32
ist der gleiche Wert, der von einem Linux-Befehl md5sum zurückgegeben wird.
echo -n foo | md5sum
acbd18db4cc2f85cedef654fccc4a4d8 -
Um den MD5-Hash des CLOB-Inhaltsfelds mit meiner gewünschten Codierung zu berechnen, ohne den Inhalt implizit in AL32UTF8 umzucodieren, habe ich diesen Code verwendet:
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)));