Хеш-функция не является isomorphic, то есть в общем случае невозможно инвертировать функцию и получить уникальное исходное значение. Это нечто совсем другое, чем «безопасно декодировано». Если есть дополнительные знания, например. о длине строки очень легко (с некоторой мощностью процессора) получить все строки-кандидата (т. е. строки, которые соответствуют целевому хеш-значению.
Так что это, вероятно, не оптимальный способ декодирования пароля и т. д. .
Простой пример для строк с длиной три:..
select (DBMS_CRYPTO.HASH(RAWTOHEX('Scr'), 2 /* dbms_crypto.HASH_MD5*/)) from DUAL;
93656D76795528C600E7BF7A17B09C8E
with chr as (
select chr(ascii('A') -1 + rownum) chr from dual connect by level <= 26
union all
select chr(ascii('a') -1 + rownum) chr from dual connect by level <= 26
union all
select chr(ascii('0') -1 + rownum) chr from dual connect by level <= 10
),
chr2 as (
select a.chr||b.chr||c.chr str
from chr a, chr b, chr c
)
select * from chr2
where DBMS_CRYPTO.HASH(RAWTOHEX(str), 2 /* dbms_crypto.HASH_MD5*/)
= '93656D76795528C600E7BF7A17B09C8E'
;
Scr