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

     本文主要是让我们了解比特币中所用到的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);

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容