it-swarm.com.de

Wie rufe ich die Oracle MD5-Hashfunktion auf?

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?

8
user755806

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 .

26
tbone

Ich würde tun:

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

ausgabe:

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

@ 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  -
  1. Ja, Sie können die SQL-Anweisung direkt in SQLPlus oder SQL-Entwickler aufrufen oder ausführen. Ich habe die SQL-Anweisung in beiden Clients gegen 11g getestet.
  2. Sie können eine beliebige C-, C # -, Java- oder andere Programmiersprache verwenden, die eine Anweisung an die Datenbank senden kann. Die Datenbank am anderen Ende des Aufrufs muss die SQL-Anweisung verstehen können. Bei 11 g funktioniert der Code.
  3. @tbone bietet eine hervorragende Warnung vor der Abwertung des dbms_obfuscation_toolkit. Das bedeutet jedoch nicht, dass Ihr Code in 12c nicht verwendet werden kann. Es wird funktionieren, aber Sie möchten eventuell zum dbms_crypto -Paket wechseln. dbms_crypto ist in meiner Version von 11g nicht verfügbar.
2
Greg

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)));
0
Nashev