date
icon
password
博客链接
Pin
Pin
Hide-in-Web
Hide-in-Web
网址
type
slug
tags
category
bottom
bottom
Hide-in-Config
Hide-in-Config
comment
status
summary
Cryptographic hash function → 哈希加密函数。
哈希函数的定义:
哈希函数是密码学中的一种重要工具,它将输入数据(或消息,message)转换为固定长度的字符串。这个过程是单向的,意味着从哈希值无法逆推出原始数据。
哈希函数具有几个关键特性:
- 相同输入总是产生相同输出;
- 不同输入尽量产生不同的输出(抗碰撞,Collision Resistance,有时也称为 Collision Free);
- 小的输入变化会导致哈希值的巨大变化。
哈希函数广泛应用于数据完整性校验、数字签名和区块链等领域。
哈希函数的输入:
哈希函数的输入通常称为是 message(消息)。
- 哈希函数的输入可以是任意长度的字符串或数据。无论输入是字母、符号、汉字、文件内容,甚至图片或音频数据,哈希函数都可以接受并处理它。
- 由于哈希函数的设计原理,它将任意长度的输入“压缩”成一个固定长度的输出值(例如,SHA-256 总是生成一个 256 位的哈希值)。
- 虽然从理论上讲输入可以是无限长的,但在实践中,输入数据的长度会受到计算资源和时间的限制。如果数据非常大,处理的时间和资源消耗也会增加。
哈希函数的输出:
哈希函数接受原始数据(消息)作为输入,并生成一个固定长度的输出,通常称为“哈希值”或“摘要”(digest)。
无论输入的长度或内容是什么,哈希函数的输出总是一个固定长度的哈希值。例如:
- SHA-256(Secure Hash Algorithm):输入任何数据,输出总是 256 位(32 字节)的哈希值。
- SHA-1(又叫做 SHA-160):输出总是 160 位(20 字节)。
- MD5:输出总是 128 位(16 字节)。
不同的输入有没有可能产生相同的哈希值?
不同的输入有可能产生同一个哈希值,这就是所谓的哈希碰撞(hash collision)。
由于哈希函数的输出空间是有限的(例如,SHA-256 的输出空间是 ),而输入空间是无限的(理论上可以是任意长度的输入),根据【 鸽笼原理 】,必然存在不同的输入数据映射到相同的哈希值。
尽管碰撞在理论上可能发生,但现代加密哈希函数设计的目标就是尽可能减少碰撞的概率。在实际应用中,找到两个不同输入产生相同哈希值的概率极低,如果想要认为产生,那么概率就更是微乎其微,因此才说比特币系统具有抗哈希碰撞的特性,这也是比特币系统的基础。