我不完全了解哈希算法。任何人都在乎以一种非常简单易懂的方式向我解释。
由于
编辑:将其与文本文件中的用户名一起使用。
答案 0 :(得分:11)
有很多hashing algorithms,但基本思想是快速(几乎)唯一地为一段数据提供标识符。然后,可以将其用作表的索引,以便快速查找数据。大多数哈希算法都有冲突,其中两个数据将散列到相同的值,但这对于最佳算法来说极为罕见。
为什么这可能有用的一个例子,让我们说我为我的城市划了整个电话簿。现在我不想进行二进制搜索,而是想查找某人的号码,我只需要通过哈希算法运行他们的名字,然后直接直接到我表格中的那个索引。
答案 1 :(得分:2)
假设你要求某人基本上解释哈希想用数组的用法。现在想象一个巨大的数组,你想要找到一个只在一个数组插槽中的特定数据。您可以获取输入数据,并使用它来计算索引,而不是遍历数组。使用您用于在数组中存储数据的相同公式,您只需跳转到所需数据的位置而不是循环。
答案 2 :(得分:2)
哈希算法试图使大数据的比较更容易。不是将数据与等式进行比较,而是比较哈希值就足够了。
有许多不同的散列算法,其中一些有密码散列算法,如MD5,SHA1,SHA256等。你可以确定两个相等的散列值,数据也是一样的。
答案 3 :(得分:2)
哈希表示数据之间的1对1关系。这是语言中常见的数据类型,尽管有时称为字典。哈希算法是一种获取输入并始终具有相同输出的方法,其他方式称为1对1函数。理想的哈希函数是当同一个进程始终产生唯一输出时。所以你可以告诉某人,这是一个文件,这里是它的md5哈希。如果文件在此期间已损坏,则md5散列将是不同的值。
实际上,散列函数将始终生成相同大小的值,例如,无论输入的大小如何,md5()都将返回128位。这使得1对1的关系变得不可能。 cryptographic hash function采取额外的预防措施,难以生成具有相同输出的2个不同输入,这称为碰撞。这也使得反转功能变得困难。散列函数用于密码存储,因为如果攻击者在哪里获取密码的散列,则它会强制攻击者在使用它进行登录之前中断散列。要打破哈希攻击,需要使用单词列表或英语词典,找到所有相应的哈希值,然后通过列表迭代查找匹配项的每个密码。
md5(),sha0和sha1()都容易受到哈希冲突的攻击,不应该用于任何安全相关的事情。相反,应该使用sha-2系列的任何成员,例如sha-256。