无论输入数据的大小及类型如何,均可以将输入数据转换成固定长度的输出
加密哈希算法拥有的特征
- 能为任意类型的数据快速创建哈希值
- 确定性:相同输入必定产生相同哈希值,换句话说,输入不同则得到的哈希值绝对不同
- 伪随机:输入数据被改变则返回的哈希值的变化是不可预测的,即不可能根据输入预测哈希值。
- 单向函数:不可逆,不能通过哈希值恢复原始的输入数据
- 防碰撞:同数据块产生相同的哈希值的机会很小,则哈希算法是防碰撞的。
区块链需要一次处理许多交易数据,还要对同一批交易数据产生一个哈希值,可以将以下模式运用到哈希值的生成:
- 独立哈希
将哈希算法独立用在每一个数据块上 - 重复哈希
将哈希值输入哈希函数来获得哈希值的哈希值 - 组合哈希
一次为多个数据块生成单个哈希值
只能在单个数据块较小时使用
将所有的独立的数据块组合成一个总数据块,计算哈希值
单个数据片段的哈希值不可用,因为只有组合后才会被交给哈希函数 - 顺序哈希
随新数据的产生,将现有哈希值与新数据组合,将其再次输入哈希算法,以获得更新数据后的哈希值
适用于希望随时间推移,保持一个独立的哈希值,在任意固定时间均存在一个哈希值,通过该值可以追溯与其对应的新数据 - 分层哈希
将分层哈希应用于一对哈希值可以形成一个哈希值组成的树状结构,其顶部将产生一个新的哈希值。
效率更高
组合的总是两个固定大小的哈希值
在每个步骤中只组合两个哈希值