J'ai ci-dessous le code. J'utilise 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'
Comment puis-je appeler ce code? Puis-je exécuter directement ce code dans sqldeveloper?
Dans Oracle 12c, vous pouvez utiliser la fonction STANDARD_HASH . Il ne nécessite aucun privilège supplémentaire.
select standard_hash('foo', 'MD5') from dual;
Dbms_obfuscation_toolkit est obsolète (voir la note ici ). Vous pouvez utiliser DBMS_CRYPTO directement:
select rawtohex(
DBMS_CRYPTO.Hash (
UTL_I18N.STRING_TO_RAW ('foo', 'AL32UTF8'),
2)
) from dual;
Sortie:
ACBD18DB4CC2F85CEDEF654FCCC4A4D8
Ajoutez un appel de fonction inférieur si nécessaire. Plus sur DBMS_CRYPTO .
Je ferais:
select DBMS_CRYPTO.HASH(rawtohex('foo') ,2) from dual;
sortie:
DBMS_CRYPTO.HASH(RAWTOHEX('FOO'),2)
--------------------------------------------------------------------------------
ACBD18DB4CC2F85CEDEF654FCCC4A4D8
@ user755806 Je ne crois pas que votre question ait reçu de réponse. J'ai pris votre code, mais j'ai utilisé l'exemple de chaîne 'foo', ajouté une fonction inférieure et trouvé la longueur du hachage renvoyée. Dans sqlplus ou le client de base de données Java pour développeurs SQL de Oracle, vous pouvez l'utiliser pour appeler le md5sum d'une valeur. Les formats de colonne nettoient la 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;
Le jeu de résultats
HASH_KEY HASH_KEY_LEN
---------------------------------- ------------
acbd18db4cc2f85cedef654fccc4a4d8 32
est la même valeur renvoyée par une commande Linux md5sum.
echo -n foo | md5sum
acbd18db4cc2f85cedef654fccc4a4d8 -
Pour calculer le hachage MD5 du champ de contenu CLOB avec le codage souhaité sans recoder implicitement le contenu en AL32UTF8, j'ai utilisé ce code:
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)));