一、说在前面
最近学习区块链,区块的hash值作为一个区块的指纹,那么如何让一个hash值与一个区块的信息唯一对应呢,就用到了sha256算法。
二、sha256
对于不同的输入,哪怕是有一点点微小的差别,输出结果都会产生较大的差异
对于相同的输入,会产生相同的输出
输出结果是一串复杂的定长字符串,例如(b5612d51ede84f87c077a42cd615f423fc780bfe5e001eab4aa754d11fd6547e)
三、代码(Go)
func main() { //fmt.Println("123") //模拟区块hash生成 //var hashdata=strconv.Itoa(1)+strconv.Itoa(2)+strconv.Itoa(3)+time.Now().String() //去掉时间戳 //var hashdata=strconv.Itoa(1)+strconv.Itoa(2)+strconv.Itoa(3) //a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 //添加信息 //var hashdata=strconv.Itoa(1)+strconv.Itoa(2)+strconv.Itoa(3)+strconv.Quote(("信息")) //b5612d51ede84f87c077a42cd615f423fc780bfe5e001eab4aa754d11fd6547e //结果相同 //添加信息+时间戳 //var TimeStamp=time.Now().String() //var hashdata=strconv.Itoa(1)+strconv.Itoa(2)+strconv.Itoa(3)+strconv.Quote(("信息"))+TimeStamp //fmt.Println(TimeStamp) //2021-02-19 16:50:20.2985161 +0800 CST m=+0.015704901 //a93379547caae30d781c49ac4441ae5534d37320a0c1f4d99a49f349d54b2e8a var TimeStamp="2021-02-19 16:50:20.2985161 +0800 CST m=+0.015704901" var hashdata=strconv.Itoa(1)+strconv.Itoa(2)+strconv.Itoa(3)+strconv.Quote(("信息"))+TimeStamp //a93379547caae30d781c49ac4441ae5534d37320a0c1f4d99a49f349d54b2e8a //nice哦! 相同 //哈希算法 var sha =sha256.New() sha.Write([]byte(hashdata)) hashed:=sha.Sum(nil) //将字节转为字符串 fmt.Println(hex.EncodeToString(hashed)) }