我有MD5-hashed一个字符串.
def hash(s: String) = { val m = java.security.MessageDigest.getInstance("MD5") val b = s.getBytes("UTF-8") m.update(b, 0, b.length) new java.math.BigInteger(1, m.digest()).toString(16) }
现在我想要原来的字符串.我怎样才能做到这一点?
MD5是加密哈希函数.密码哈希是单向函数.您无法撤消加密哈希值,但您可以强制删除邮件以查找加密哈希值.
暴力强制意味着尝试所有可能的输入字符串,然后检查散列值是否正确.这是可能的,因为加密哈希在计算上也是唯一的.这意味着有无穷无尽的消息将导致生成相同的哈希值,但不可能两个导致相同的哈希值.由于MD5断开,MD5哈希值对于特殊构造的消息不是唯一的.如果您可以找到具有相同哈希值的两条消息,则称为冲突.
也可以创建称为彩虹表的巨大查找表.这可以帮助加速寻找正确的输入.这仅适用于相对较小或可猜测的数据输入; 即它们主要用于查找弱密码.其中一些数据库可以在网上找到.