# 区块链 **Repository Path**: maglna1/blockchain ## Basic Information - **Project Name**: 区块链 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-07 - **Last Updated**: 2022-01-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 区块链 ### 1. 相关密码学基础知识 #### 1.1 SHA256 ##### 1.1.1 SHA256介绍 SHA-2,名称来自于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,一种密码散列函数算法标准,由美国国家安全局研发,属于SHA算法之一,是SHA-1的后继者。 SHA-2下又可再分为六个不同的算法标准 包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。 这些变体除了生成摘要的长度 、循环运行的次数等一些微小差异外,算法的基本结构是一致的。 回到SHA256上,说白了,它 **就是一个哈希函数** 。 哈希函数,又称散列算法,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(或哈希值)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。 对于任意长度的消息,SHA256都会 **产生一个256bit长的哈希值** ,称作消息摘要。 这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示 来看一个例子: 干他100天成为区块链程序员,红军大叔带领着我们,fighting! 这句话,经过哈希函数SHA256后得到的哈希值为: A7FCFC6B5269BDCCE571798D618EA219A68B96CB87A0E21080C2E758D23E4CE9 ##### 1.1.2 SHA256原理:常量的初始化、信息预处理、使用到的逻辑运算 (1) **常量的初始化** :8个哈希初值+64个常量,自然数中 **前8个质数** (2,3,5,7,11,13,17,19)的 **平方根的小数部分取前32bit** 而来 (2) **信息预处理** :附加填充比特+附加长度 STEP1:附加填充比特 在报文末尾进行填充,使报文长度在对512取模以后的余数是448 填充是这样进行的:先补第一个比特为1,然后都补0,直到长度满足对512取模后余数是448。 STEP2:附加长度值 附加长度值就是将原始数据(第一步填充前的消息)的长度信息补到已经进行了填充操作的消息后面。 (3) 逻辑运算 ##### 1.1.3 计算消息摘要 [https://blog.csdn.net/u011583927/article/details/80905740](http://blog.csdn.net/u011583927/article/details/80905740) #### 1.2 非对称加密(以RSA为例) 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 ### 2. 区块的数据结构|04-BTC协议👇 #### 2.1 区块=区块头+区块体 **区块头:** (1)version(版本号) (2)hash of previous block header(前一区块的区块头的hash) (3)Merkle root hash(Merkle树的hash) (4)target(<0000) (5)nonce(随机数) **区块体:** (1)transaction list(交易列表) #### 2.2 全节点、轻节点 全节点是区块头+区块体,轻节点是区块头。轻节点无法独立验证,因为他没有保存交易信息。