如何理解hash加密算法?

秘密课程 2024-03-05 04:03:18

区块链最核心的两个技术点是共识机制和密码学,由于共识机制是公链的基础,接下来讲一讲区块链的密码学基础,有关区块链密码学你只需要了解它的基本原理和优劣即可。

hash算法

哈希算法是一类数学函数算法,又称散列算法,它是一种数据映射关系。

Hash算法有什么特点正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。代码实现package mainimport ( md52 "crypto/md5" sha2562 "crypto/sha256" "encoding/hex" "fmt" "io" "os")// 实现md5func md5(data string) { fmt.Println("-----------Md5-----------") mes := []byte(data) m := md52.New() m.Write(mes) s2 := hex.EncodeToString(m.Sum(nil)) fmt.Println(s2)}// 实现sha256func sha256(data string) { fmt.Println("-----------sha256-----------") mes := []byte(data) m := sha2562.New() m.Write(mes) s2 := hex.EncodeToString(m.Sum(nil)) fmt.Println(s2) //对文件中的数据进行加密 fmt.Println("-----------文件读取-----------") file, _ := os.Open("test.txt") h := sha2562.New() io.Copy(h, file) resu := h.Sum(nil) fmt.Println(hex.EncodeToString(resu))}func main() { var hello string = "Hello,World!" md5(hello) sha256(hello)}

md5 实现原理

对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

填充:如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448。填充的方法是填充一个1和n个0。填充完后,信息的长度就为N*512+448(bit);记录信息长度:用64位来存储填充前信息长度。这64位加在第一步结果的后面,这样信息长度就变为N*512+448+64=(N+1)*512位。装入标准的幻数(四个整数):标准的幻数(物理顺序)是(A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16)。如果在程序中定义应该是(A=0X67452301,B=0XEFCDAB89,C=0X98BADCFE,D=0X10325476)四轮循环运算sha256 实现原理

SHA-256 算法输入报文的最大长度不超过2^64 bit,输入按512-bit 分组进行处理,产生的输出是一个256-bit 的报文摘要。

附加填充比特:对报文进行填充使报文长度与448 模512 同余(长度=448 mod 512),填充的比特数范围是1 到512,填充比特串的最高位为1,其余位为0。就是先在报文后面加一个 1,再加很多个0,直到长度 满足 mod 512=448.为什么是448,因为448+64=512. 第二步会加上一个 64bit的 原始报文的 长度信息。附加长度值 将用64-bit 表示的初始报文(填充前)的位长度附加在步骤1 的结果后(低位字节优先)。初始化缓存:使用一个256-bit 的缓存来存放该散列函数的中间及最终结果。处理512-bit(16 个字)报文分组序列:该算法使用了六种基本逻辑函数,由64步迭代运算组成。每步都以256-bit 缓存值ABCDEFGH 为输入,然后更新缓存内容。 每步使用一个32-bit 常数值Kt 和一个32-bit Wt。

密码学是所有区块链的基础,所以说如果没有密码学的支撑,区块链将会退化成普通的分布式日志系统。

0 阅读:0