美文网首页
了解比特币中所用的Hash算法-SHA-256

了解比特币中所用的Hash算法-SHA-256

作者: 搬砖人1314 | 来源:发表于2018-09-28 16:52 被阅读184次

     本文主要是让我们了解比特币中所用到的Hash(SHA-256)算法.我们从什么是Hash,常见的哈希算法有那些,当前主流使用的哈希算法是什么,哈希算法的性能及安全和建议,最后我们看C#怎么实现SHA-256算法。

Hash定义及是什么:

     Hash(哈希或散列)算法是非常基础也非常重要的计算机算法,它能将任意长度的二进制明文映射为较短的(通常是固定长度的)二进制Hash值,并且不同的明文很难映射为相同的Hash值。

     例如:SHA-256(123456)=8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

SHA-256(我们今天来看看比特币使用的Hash(SHA-256)算法)=4208d006395df44386329cd5720040f5bff4f34b57b78e39f879f4ca94c3ad94

      以上两个例子,第一个(123456)例子和第二个(我们今天来看看比特币使用的Hash(SHA-256)算法)例子,通过哈希(SHA-256)算法把不同长度的明文字符映射为固定长度字符。也就是说只要是SHA-256计算后的结果为:8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92,则说明该内容极大概率上就是(123456).

常见的Hash算法及主流使用算法是:

     目前常见的Hash算法包括MD5和SHA(SHA-1、SHA-2、SHA-3).
     MD4(RFC 1320)是MIT的Ronald L.Rivest在1990年设计的,MD是Message Digest的缩写。其输出为128位。MD4已被证明不够安全。

     MD5(RFC 1321)是Rivest于1991年对MD4的改进版本。它对输入仍以512位进行分组,其输出是128位。MD5比MD4更加安全,但是过程更加复杂,计算速度也慢一些。MD5已被证明不具备”强抗碰撞性”。

     SHA(Secure Hash Algorithm)并非一个算法,而是一个Hash函数族。NIST(NationalInstitute of Standards andTechnology)于1993年发布其首个实现。知名的SHA-1算法1995年面世,它输出长度160位的Hash值,抗穷举性更好。SHA-1设计模仿了MD4算法,采用类似原理。SHA-1已被证实不具备“强扛碰撞性”。

      为了提高安全性,NIST还设计出了SHA-224、SHA-256、SHA-384和SHA-512算法(SHA-2),跟SHA-1算法原理类似。SHA-3相关算法也已经被提出。

     现在还是有很多系统采用的MD5和SHA-1算法,但是这些算法已经不安全了,一般现在推荐至少使用SHA-256或更安全的算法。

性能及安全和建议:

       Hash算法一般都是计算敏感型的。也意味着计算资源是瓶颈,主频越高的CPU运行Hash算法速度越快。因此可以通过硬件加速来提升Hash计算的吞吐量。也有一些Hash算法不是计算敏感型的。例如scrypt算法,计算过程需要大量内存资源,节点不同通过简单地添加更多CPU来获得Hash性能提升。这样的Hash算法经常用来避免算力攻击的常景。

      Hash算法不是一种加密算法,不能用于对信息的保护,但是Hash算法畅用于对口令的保存上。例如用户登录网站需要通过用户名口令来验证。如果网站后台数据库直接保存用户口令的明文,一旦数据库发生泄漏后果不堪设想。

      利用Hash的特性,后台可以仅保存密码的Hash值,这样只要比对Hash值一致,则说明输入的口令正确,及时数据库泄露了,也无法从Hash值还原口令,只能进行穷举测试。

      由于用户设置的口令的强度不够,只是简单字符串,例如上面我们说的password、123456、654321或者生日等。有人通过这些口令,计算对应的Hash值,制作对应的哈希值库。这样通过Hash值可以快速反查原始口令。

      为了防范这一类攻击,我们建议不要用简单的口令及个人生日作为口令,现今个人身份信息很容易得到,以上是个人建议。

      如果是网站或者说是系统,可以采用在口令基础上添加随机数后进行Hash且随机数存放在不同的地方,这样只要不是两者同事泄露,攻击者就很难破解。

最后我们用C#方式展示SHA-256算法:

首先我们需要引用类:
usingSystem.Security.Cryptography

声明字节数组来接收需要序列化的字符串:
byte[] bytValue =System.Text.Encoding.UTF8.GetBytes(“123456”);

然后调用Hash(SHA-256),传入字节数组:
SHA256 sha256 = newSHA256CryptoServiceProvider();

声明字节数组接收已经哈希的值:
byte[] retVal =sha256.ComputeHash(bytValue);

以上是我们谈的内容,如果需要深入了解,哪我们感觉行动吧!

相关文章

  • 了解比特币中所用的Hash算法-SHA-256

    本文主要是让我们了解比特币中所用到的Hash(SHA-256)算法.我们从什么是Hash,常见的哈希算法有那些,...

  • 莱特币背后的秘密 - 白话Scrypt密码算法

    与比特币相比,莱特币的不同之处关键在于,比特币采用了SHA-256哈希算法,而 莱特币采用的是Scrypt哈希算法...

  • 莱特币背后的秘密 - 白话Scrypt密码算法

    与比特币相比,莱特币的不同之处关键在于,比特币采用了SHA-256哈希算法,而 莱特币采用的是Scrypt哈希算法...

  • SHA-256算法在FPGA上的实现

    SHA-256是区块链和比特币方案中用到的一种哈希算法。区块链和比特币大家都应该有所了解。比特币的设计原则是用加密...

  • Bitcoin

    比特币采用SHA-256、RIPEMD-160哈希算法生成密钥,使用SHA-256作nonce碰撞以挖矿Bitco...

  • 20种常见数字货币

    1、比特币(BTC) Bitcoin比特币的概念最初由中本聪在2009年提出,点对点基于SHA-256算法的一种P...

  • 2018-06-30

    比特币使用的加密算法是椭圆加密算法 。该算法是非对称加密算法 挖矿使用的算法是sha-256算法,该算法也是一种非...

  • 黑客花无涯:人肉计算比特币:每天0.67哈希值

    在这篇文章中,我们一起来看一看用纸和笔来人肉“挖”比特币的难度到底有多大。实际上,用于挖矿的SHA-256算法其实...

  • 比特币挖矿简介

    本文主要介绍比特币挖矿的基本算法,想要了解什么是比特币的同学可以先看这里:什么是比特币比特币是底层基于区块链的应用...

  • 区块链之加解密算法

    常用的加解密算法  常用的加解密算法有三类:对称加密算法、非对称加密算法以及hash加密算法。 在比特币中用到了非...

网友评论

      本文标题:了解比特币中所用的Hash算法-SHA-256

      本文链接:https://www.haomeiwen.com/subject/rgphoftx.html