赚钱好难啊7星评价
2020-09-21 21:18:09
比特币并不是任何有形的硬币,但也不是大家想象的能够把比特币从整个系统中分离出来的一段数据。
比特币的本质其实就是一堆复杂算法所生成的特解。特解是指方程组所能得到无限个(其实比特币是有限个)解中的一组。而每一个特解都能解开方程并且是唯一的。 以人民币来比喻的话,比特币就是人民币的序列号,你知道了某张钞票上的序列号,你就拥有了这张钞票。如何保证手里的序列号是唯一的,而且不会被复制呢?
这就要了解比特币的核心算法:SHA256算法!
SHA256是SHA-2下细分出的一种算法。SHA-2,名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准,由美国国家安全局研发,属于SHA算法之一,是SHA-1的后继者。SHA256就是一个哈希函数。
哈希函数,又称散列算法,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(或哈希值)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。
对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,称作消息摘要,这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示。
哈希函数有哪些特征呢?
传统的加密方法是不能公开的,因为知道了加密方法也就知道了解密方法,只需要反向计算就能解密。有没有一种加密算法,即使知道了加密方法,也不能恢复出原文呢?这种算法的原理是,在加密过程中加入一些不可逆的运算来实现。
比如说:需要加密的数字 M,采用下面的加密规则进行加密。
1. 将M 加上 123456;
2. 把结果平方,取第 3 - 10 位,组成一个8位数字;
3. 将这个数字除以456789 求余数;
得到的数字就是加密之后的结果。
在密码学上,这种会丢掉一部分信息的加密方式被称为“单向加密”,也叫哈希算法。一个可靠的哈希算法至少需要满足下面几个基本条件:
第一,对于给定的数据M,很容易算错哈希值X = F(M);
第二,根据X 很难算出M;
第三,很难找到M 和 N使得 F(M) = F(N)。
真实世界的哈希算法原理和上面类似,但也更为复杂。目前被广泛使用的哈希算法包括MD5以及SHA-256算法。哈希算法的结果长度都是固定的,比如:MD5 的结果长度是32个字符,而SHA-256 的是64个字符。所以,后者的算法强度比前者的要强,也就更安全。假设我们要对“WoYaoJiaMi”进行加密,MD5 算法的结果是:“3832EE29D065861A9C006BEDA8C63D3C”,而SHA-256 的结果是: “3C56D7479A96942B9D96D4D1AF24F8F8566EBD30B393B40099F43A48F093B7C9”。
哈希算法是非对称加密算法,在真实应用的时候,有一个缺陷就是密码传输的保密问题。需要即使有人拿到了密码也没法解密,还需要知道另外一个密码才可以解密。前一个密码称之为公钥,后一个密码称之为私钥,只要私钥不丢,任何人都无法窃取或者篡改数据。这种密码系统,加密和解密使用不同的密码,公钥用来加密并且是可以公开的,解密使用密钥进行加密。
酸菜丶小子5星评价
2020-09-11 21:19:24
在比特币系统里有一个比较重要的加密算法,这就是SHA256算法。
SHA256的中文全称叫做“安全哈希算法”。所谓的“哈希”是Hash的音译,而Hash就是进行Hash函数的意思。通常来说,Hash函数的运算有一个共同特点。就是不论原始数据有多少位,只要通过Hash运算后,得到结果的长度都是固定的。
概念往往是抽象的,那么下面我们就用一个形象的例子进行说明。如果我们去图书馆借书,就会发现不管是什么图书,书的侧面都会贴着一张便签,便签上通常都有一个与图书对应的编号。为了方便管理,这些编号的长度通常都是一样的。这个情况和Hash函数就非常类似。我们可以把输入Hash函数之前的数据看作是书本,这些书本的字数都不一样,有的有几万字,有的有几十万字。但是一旦这些数据通过Hash函数处理过以后,就全部都变成长度相同的编号了。而且这些编码必须要满足以下几点要求:
第一、输入Hash函数之前的数据和通过Hash函数处理过后得到的编号必须一一对应。
第二、每一个编号的长度都是固定的。
第三、我们无法通过编号倒推出数据的内容。
Hash函数的类型有很多种,包括SHA224、SHA256、SHA384、SHA512、SHA512/224、SHA512/256等。但是比特币仅选用了SHA256。这个256代表的意思是,数据经过函数运算后得到的结果必须是一个256位的2进制数字。也就是类似这样的结果:“001100……11011”,这其中一共有256位。
在比特币里,为什么要把数据转换成256位的数字呢?其实之所以选择SHA256,主要是为了验证两个文件是否相等。
比如:有一个商业间谍获得了一份重要的商业报告。但是这个间谍害怕这份商业报告在网上传递的过程中被别人截获并进行修改。于是就把这份商业机密进行了处理,通过SHA256运算,生成了一个数值,我们暂且称这个数值为A1。
然后这位间谍就把这份商业报告和A1通过电子邮箱传递了出去,并在邮件里注明了:“为了避免其他人对商业报告进行修改,报告下载完成后,请大家对报告做一次SHA256运算,然后看看这个计算结果和A1是否相符。如果和A1完全一致,那么就意味着这份商业报告没有被其他人动过手脚。如果和A1不同,那么就说明你下载的报告很可能被别人篡改过。”
中本聪在设计比特币的时候之所以选择SHA256,主要是看中了SHA256在验证改动方面有着巨大的优势。因为只要输入数据有微小的区别,通过SHA256计算出来的数值都会有巨大的差距。
比如下面这三句话,原文虽然有微小的不同,但是通过Hash函数处理,就会让SHA256值产生巨大的差异,而且这种差异是毫无规律可循的。
原文1:动静不失,人所易明。
S1: 284c4ddd2e5ef97924cc70e90cd02fd792e3fd62
原文3:动静不失,人所易明
S2:991780940ced6e6f910013f2ba2ac732e23601ef
原文3:动静不失人所易明
S2:62e07ce4d7d529a6268841d521bf882d3b385199
SHA安全加密标准,是至今国际上使用最为广泛的较为安全的压缩算法之一,由美国NIST和NSA两个组织共同开发。此算法于1993年5月11日被美国NIST和NSA设定为加密标准。