单向散列函数介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/82813039

一 点睛

单向散列函数有一个输入和一个输出,其中输入称为消息,输出称为散列值。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性。

单向散列函数根据消息的内容计算出散列值。

这里的消息不一定是人类能够读懂的文字,也可以是图像文件或声音文件。单向散列函数不需要知道消息实际代表的含义。无论任何消息,单向散列函数都会将它作为单纯的比特序列来处理,即根据比特序列计算出散列值。

散列值的长度和消息的长度无关。无论消息是1比特、还是100MB、甚至100GB,单向散列函数都会计算出固定长度的散列值。以SHA-256单向散列函数为例,它所计算的散列值的长度永远是256比特(32字节)。

散列值的长度总是固定的。

由于散列值很短,因此很容易处理和使用。

二 实战

场景:Alice想确认今天看到的文件和昨天的文件是否是同一份文件

回家之前,Alice用单向散列函数计算文件的散列值,在这里Alice的文件就相对于消息。假设她计算出的散列值如下:

单向散列函数所输出的散列值长度时固定的(在这个例子中是32字节),无论Alice的文件大小是几百MB,甚至是几GB,散列值的长度永远是32字节(256比特)。Alice可以将这个值打印出来放在安全的地方。

第二天早上,Alice再次计算硬盘中文件的散列值,如果再次计算出的散列值为:

和昨晚的散列值一致,就可以判断文件是真的。只要单向散列函数工作正常,那么“只要散列值相等,消息就相等”这个判断就有很高的概率是成立的。

如果计算出的散列值像下面这样:

和昨晚散列值不一致,那么这个文件和昨晚的文件就绝对是不一样的。

要确认完整性,不需要对比消息本身,而只要对比单向散列函数计算出的散列值就可以了。

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/82813039
今日推荐