我只是搞乱了python上的一些代码,并意识到如果你有md5(基本上是暴力攻击,影响md5,经历数百万个密码,转换),找出密码是不是很难他们到md5并检查它是否匹配,然后输出密码)但是很难得到md5。我做了一些挖掘,我发现的是一些人使用随机生成的md5哈希密码然后找出它对应的密码的视频。我想知道的是,如果有任何方法你可以找到没有原始密码的密码的md5哈希。 THX
- 如果有任何不清楚的地方,请在评论中告诉我,我会清理它
答案 0 :(得分:2)
如果原始密码和暴力破解者尝试哈希到相同的值,你可以强制使用md5哈希来检索原始密码。为了弥补这一点,通常密码系统使用所谓的“盐”来使这更加困难。 (另见:What is SALT and how do i use it?)
一般来说,你的问题的答案是否定的,没有简单的方法来获得某些值的哈希,而没有首先获得该值。
最初,哈希算法被设计为接受一些输入并对其进行操作,因此算法的输出可以用作值表的索引。目标是获得1:1的哈希值(理想情况下,这是非常快的,希望是恒定的时间)。这意味着,给定一些输入值x
,y = hash(x)
应该只有x
哈希到y
。换句话说,y1 = hash(x1) = hash(x)
当且仅当x1 = x
。
随着时间的推移,开发出具有其他属性的算法。由于散列算法用于密码存储和快速比较等常见问题,因此使用散列算法进行评估的一个原因是输入的微小变化会导致输出的差异。换句话说,如果hash(x)
完全改变(如x
的情况),或者它改变了一位,则散列函数not(x)
应该改变。
一个必然结果是,如果hash(x)
在更改单个位时发生显着(如hash(x+0x000001)
的话),那么它会使比较函数更快(因为你真的只需要检查更高阶位以确定两个对象是否相同,在一般情况下)。这意味着你不能简单地通过迭代来轻松计算连续项的哈希值通过哈希(即“猜测”函数hash(x)
的哈希输出而不首先拥有x
)。