区块链学习(04)SHA256加密算法

哈希算法

学Java的对哈希算法都不陌生,毕竟每个类都有hashCode方法。    散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。


一个优秀的 hash 算法,将能实现:

正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。

逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。

输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。

冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

但在不同的使用场景中,如数据结构和安全领域里,其中对某一些特点会有所侧重。


安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512。主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。比特币里面的就是SHA-256算法。安全散列算法说简单一些,就是对一个对象的多个关键不重复信息组合起来,通过算法生成一个加密字符串。



SHA256代码实现

继续上一个项目,在对应的包下建一个工具类Sha256Utils,下面是算法的具体内容:

可以看到,sha256在jdk中也有对应的实现,直接调用即可。下面是算法的测试类内容:

运行可以看到如下结果:

与在线工具对比,可以验证正确性:

项目代码:https://gitee.com/blueses/btc-demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (一)自然地理部分 1 影响温度的因素(11个) 2 影响降水或水分的因素(11个) 3 影响气候的因素(4个)/...
    携喻阅读 1,284评论 0 2
  • 内心强大的人有稳定的自我价值感,不会通过控制别人,从别人那寻求安慰和支持来借价值感。生活中的我们对情绪控制得往往不...
    奔跑的宣宣阅读 222评论 0 0
  • 今天是平安夜,我正在写字的时候窗外响起了爆竹声,颇有几分除夕夜的味道。路灯下,张老三蹲在地上,在一块没有被积雪覆盖...
    野厨橙先生阅读 555评论 2 6