什么是散列函数

2018-01-01

散列函数只是一个接受输入值的函数,并且从该输入创建输入值的确定性输出值。 对于任何x输入值,只要散列函数运行,您将始终收到相同的y输出值。 这样,每个输入都有一个确定的输出。

函数基本上是接受输入并从该输入派生输出的东西。

$$ f(x)=y $$

因此,哈希函数需要一个输入可以是任何数据 --( 数字,文件等) 并输出哈希。 哈希通常显示为十六进制数字。

$$ md5("hello world") = 5eb63bbbe01eeed093cb22bb8f5acdc3 $$

这是散列函数md5,它从任何输入数据创建一个32个字符的十六进制输出。 散列函数通常是不可逆的(单向),这意味着如果只知道输出,则不能计算输入 - 除非您尝试所有可能的输入(这称为暴力攻击)。

散列函数通常用于证明某些事物与其他事物相同,而不事先揭示信息。 这是一个例子。

比方说,爱丽丝正在吹嘘鲍勃,她知道他们在数学课上挑战问题的答案。 鲍勃希望她证明她知道答案,而她却没有告诉他这是什么。 所以,爱丽丝把她的答案(假设答案是42)推导出来,以产生这个散列

$$ md5(42) = a1d0c6e83f027327d8461063f4ac58a6 $$

爱丽丝给了这个散列给鲍勃。 鲍勃找不到这个哈希的答案 - 但是当他自己找到答案时,他可以哈希答案,如果他得到了同样的结果,那么他知道爱丽丝确实有答案。 散列通常用于验证信息的情况下,而不会向正在验证的一方揭示它。

https://learncryptography.com/hash-functions/what-are-hash-functions