作者:yuanchaoknightt
发布时间:2017年3月13日
网络来源:CSDN
在比特币中钱包地址的产生过程中用到了一种叫做SHA256的杂凑算法,SHA-256是SHA-1算法的改进版本,前不久,google安全博客上发不了世界上第一例公开的SHA-1哈希碰撞实例,证明SHA-1已经不安全了,而作为SHA-1改进版本的SHA-256算法暂时还是安全的。不得不佩服中本聪在最初设计比特币时选择了更加安全的SHA-256算法。
SHA-256算法的实现过程如下所示:
对任何长度的报文(就是你要加密的信息),计算出来都是一个32 byte的结果,称之为摘要。等你拿到报文和摘要之后,对报文进行SHA-256算法,把计算出的结果和收到的摘要比对,如果一样,就说明报文在传输过程中没有被改。
SHA-256算法输入报文的最大长度不超过2^64 bit,输入按512-bit分组进行处理,产生
的输出是一个256-bit的报文摘要。该算法处理包括以下几步:
的输出是一个256-bit的报文摘要。该算法处理包括以下几步:
step1:附加填充比特。
对报文进行填充使报文长度与448 模512 同余(长度=448 mod 512),填充的比特数范围是1 到512,填充比特串的最高位为1,其余位为0。就是先在报文后面加一个 1,再加很多个0,直到长度满足mod 512=448.为什么是448,因为448+64=512. 第二步会加上一个 64bit的原始报文的 长度信息。
step2:附加长度值。
将用64-bit 表示的初始报文(填充前)的位长度附加在步骤1的结果 后(低位字节优先)。
step3:初始化缓存。
使用一个256-bit 的缓存来存放该散列函数的中间及最终结果。该缓存表示为A=0x6A09E667 , B=0xBB67AE85 , C=0x3C6EF372 , D=0xA54FF53A, E=0x510E527F , F=0x9B05688C , G=0x1F83D9AB , H=0x5BE0CD19 。
step4:处理512-bit(16 个字)报文分组序列。
该算法使用了六种基本逻辑函数,由64 步迭代运算组成。每步都以256-bit 缓存值ABCDEFGH 为输入,然后更新缓存内容。
每步使用一个32-bit 常数值Kt 和一个32-bit Wt。
每步使用一个32-bit 常数值Kt 和一个32-bit Wt。
Muchas gracias. ?Como puedo iniciar sesion?