有人告诉我,他见过这样的软件系统:
从其他系统检索MD5加密密码; 解密加密的密码和 使用系统自己的算法将密码存储在系统的数据库中。
这可能吗?我认为解密MD5哈希是不可能/可行的。
我知道有MD5字典,但是有真正的解密算法吗?
有人告诉我,他见过这样的软件系统:
从其他系统检索MD5加密密码; 解密加密的密码和 使用系统自己的算法将密码存储在系统的数据库中。
这可能吗?我认为解密MD5哈希是不可能/可行的。
我知道有MD5字典,但是有真正的解密算法吗?
当前回答
不直接。由于鸽子洞原理,有(可能)不止一个值散列到任何给定的MD5输出。因此,你不能肯定地扭转它。此外,MD5是为了使查找任何这样的反向哈希变得困难(然而,已经有产生冲突的攻击-也就是说,产生两个哈希到相同结果的值,但您无法控制最终的MD5值是什么)。
但是,如果将搜索空间限制为长度小于N的普通密码,则可能不再具有不可逆性属性(因为MD5输出的数量远远大于感兴趣域中的字符串数量)。然后,您可以使用彩虹表或类似的反向哈希。
其他回答
从技术上讲,这是“可能的”,但在非常严格的条件下(彩虹表,基于用户密码在哈希数据库中的可能性非常小的暴力强制)。
但这并不意味着它是
可行的 或 安全
你不想“反转”一个MD5哈希。使用下面列出的方法,您将永远不需要。“逆转”MD5实际上被认为是恶意的——一些网站提供了“破解”和暴力破解MD5哈希的能力——但它们都是包含字典单词、以前提交的密码和其他单词的庞大数据库。有一个非常小的机会,它将有你需要反向的MD5哈希。如果你已经咸MD5哈希-这也不会工作!:)
使用MD5哈希的登录方式应该是: 在注册过程中: 用户创建密码->密码使用数据库存储的MD5 ->哈希值进行哈希
在登录: 用户输入用户名和密码->(用户名选中)密码使用MD5哈希->哈希与数据库中存储的哈希进行比较
当需要“丢失密码”时: 2个选择:
用户发送一个随机密码来登录,然后在第一次登录时修改它。
or
用户会被发送一个链接来更改他们的密码(如果你有安全问题/等等),然后新密码被散列,并用数据库中的旧密码替换
在寻找哈希函数的逆函数方面,没有办法“恢复”哈希函数。如前所述,这就是哈希函数的意义所在。它不应该是可逆的,它应该允许快速哈希值计算。因此,找到产生给定哈希值的输入字符串的唯一方法是尝试所有可能的组合。这就是所谓的蛮力攻击。
尝试所有可能的组合需要花费大量时间,这也是为什么使用哈希值以相对安全的方式存储密码的原因。如果攻击者能够访问您的数据库,其中包含所有用户密码,那么无论如何您都会失败。如果您有哈希值和(理想地说)强密码,那么攻击者将很难从哈希值中获取密码。
存储哈希值也没有性能问题,因为计算哈希值相对较快。因此,大多数系统所做的是计算用户输入的密码的哈希值(这很快),然后将其与用户数据库中存储的哈希值进行比较。
不,这是不可能的。您可以使用字典,也可以尝试散列不同的值,直到获得您正在寻找的散列。但它无法被“解密”。
不直接。由于鸽子洞原理,有(可能)不止一个值散列到任何给定的MD5输出。因此,你不能肯定地扭转它。此外,MD5是为了使查找任何这样的反向哈希变得困难(然而,已经有产生冲突的攻击-也就是说,产生两个哈希到相同结果的值,但您无法控制最终的MD5值是什么)。
但是,如果将搜索空间限制为长度小于N的普通密码,则可能不再具有不可逆性属性(因为MD5输出的数量远远大于感兴趣域中的字符串数量)。然后,您可以使用彩虹表或类似的反向哈希。
理论上,你不能。哈希的意义在于它是单向的。这意味着如果有人设法获得哈希列表,他们仍然无法获得您的密码。此外,这意味着即使有人在多个网站上使用相同的密码(是的,我们都知道我们不应该这样做,但是……)任何访问站点A的数据库的人都不能在站点B上使用该用户的密码。
The fact that MD5 is a hash also means it loses information. For any given MD5 hash, if you allow passwords of arbitrary length there could be multiple passwords which produce the same hash. For a good hash it would be computationally infeasible to find them beyond a pretty trivial maximum length, but it means there's no guarantee that if you find a password which has the target hash, it's definitely the original password. It's astronomically unlikely that you'd see two ASCII-only, reasonable-length passwords that have the same MD5 hash, but it's not impossible.
MD5是一个不好的哈希密码:
它的速度很快,这意味着如果你有一个“目标”散列,尝试很多密码,看看你是否能找到一个散列到目标的密码是很便宜的。盐析对这种情况没有帮助,但它有助于增加寻找与使用不同盐析的多个哈希中的任何一个匹配的密码的代价。 我相信它有已知的缺陷,这使得它更容易发现冲突,尽管在可打印文本(而不是任意二进制数据)中发现冲突至少会更困难。
我不是安全专家,所以除了“不要使用自己的身份验证系统”之外,我不会给出具体的建议。从信誉良好的供应商那里找一个,然后使用它。安全系统的设计和实现都是一项棘手的工作。