Oracle Hash MD5解密

时间:2015-07-16 10:25:36

标签: sql oracle plsql md5

我使用此方法加密我的字符串:

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

现在我有加密的MD5字符串,如:

  

F267E16E70C2528280A487D5D13617A6

有没有办法解密此代码以再次获取启动字符串?

3 个答案:

答案 0 :(得分:2)

MD5是一种散列算法,并非真正用于加密或解密。 所以,不,没有办法再次获得start-string。实际上,给定哈希值,可能会有很多潜在的起始字符串。

答案 1 :(得分:0)

散列函数不是isomorphic,即在一般情况下不可能反转函数并获得唯一的原始值。 这与蜜蜂非常不同,安全解码"。如果有其他知识,例如关于字符串的长度,很容易(有一些CPU功率)来获取所有候选字符串(即映射到目标哈希值的字符串。

所以这可能不是解密密码等的最佳方式。

长度为3的字符串的简单示例:

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 

答案 2 :(得分:0)

哈希算法是单向函数。因此,没有可行的方法来反转所涉及的计算并达到原始输入值。进一步的散列算法对任意长度的输入字符串进行操作,但具有固定的宽度输出,在MD5算法的情况下,它输出一个16字节的散列值,可以表示16字节或16,000字节或更多的输入值。

因此,虽然您无法反转算法以检索原始输入,但您可以计算潜在候选输入的哈希值(希望)找到与您现有哈希值匹配的哈希值。对原始输入字符串的一些了解将有助于减少这种暴力攻击的问题空间。

相关问题