2015-07-16 5 views
0

Я использую этот метод для шифрования моих строк:Oracle Hash MD5 дешифрования

RETURN RAWTOHEX(DBMS_CRYPTO.HASH(SRC=>to_hash, TYP=>dbms_crypto.HASH_MD5)); 

Теперь я шифрованный MD5 строка как:

F267E16E70C2528280A487D5D13617A6

Есть ли способ расшифруйте этот код, чтобы снова получить начальную строку?

ответ

2

MD5 - это алгоритм хеширования, который не предназначен для шифрования или дешифрования. Итак, нет, нет способа снова получить начальную строку. Фактически, учитывая хэш, было бы много потенциальных стартовых строк, из которых он мог бы исходить.

0

Хеш-функция не является 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 
0

алгоритмов хэширования являются одним из способов функции Как таковой нет осуществимого способа обратного вычисления, связанные и приходим к исходному значению входного Дальнейшие алгоритмы хэширования работают на входных строках произвольной длины, но имеют выход фиксированной ширины, в случае MD5 алгоритм выводит 16-байтовое хэш-значение, которое может представлять входное значение 16 байтов или 16 000 байт или более.

Так что, пока вы не можете отменить алгоритм для извлечения исходного ввода, вы можете вычислить значения хэша потенциальных потенциальных входов, чтобы (надеюсь) найти тот, который соответствует вашему существующему хеш-значению. Некоторое знание исходной входной строки было бы полезно для уменьшения проблемного пространства такого рода атаки грубой силы.