区块链的数字签名在加密时所涉及的两个核心内容,分别是哈希算法和非对称加密。
哈希(HASH)算法,通常也叫做散列函数。它可以把任意长度的明文二进制数据通过散列函数算法,变换成较短的固定长度的二进制数据,这个二进制值就称为哈希值。
区块链的代表——比特币所使用的哈希算法是SHA-256,其安全性非常高。
哈希算法拥有以下的特点:
正向快速:给出明文和哈希算法,能在有限时间和有限资源内,将任意长度的明文快速计算出哈希值。
逆向困难:给定若干哈希值,在现有计算条件下,有限时间内几乎无法逆推出明文。
雪崩效应:哪怕原始输入信息修改一丁点儿,产生的哈希值也有很大的不同。所以,数据是否被篡改过,是否完整,都可以通过它的哈希值进行检验。
长度一致:长度不一样的信息散列计算后,长度是一致的。
冲突避免:不同的明文,通过散列计算后不会得到相同的哈希值,避免发生冲突。(哈希冲突可用一定方法来解决。)

区块链应用哈希算法主要有以下几个用处。
第一,加密私钥,保证密钥安全。(私钥是什么,有什么作用我们在下一段讲解。)
第二,数据区块验证,形成唯一交易ID。哈希值是一段固定长度且极其紧凑、数据唯一的数值表示形式,可做为区块ID,并实现数据验证功能。
第三,实现工作量证明。哈希函数的难题友好性构成了基于工作量证明(POW,Proof Of Work,以后文章中进行讲解)的共识算法的基础。通过哈希运算得出的符合特定要求的哈希值,可以作为共识算法中的工作量证明。
哈希算法在日常的电脑应用中也比较常见,比如我们验证下载的文件是否完整时,哈希值就是一个验证手段。下载的文件哪怕有一个字节不一样,也会得出不一样的哈希值。
另外,你在注册网站时的密码,一般也会通过哈希算法计算后进行存储,而不会用明文存储,防止数据库泄密。
验证时,用户输入的密码在散列后和库里的哈希值进行对比确定身份。这两个功能就分别是哈希算法对数据完整性验证和用户身份验证的应用。