一、说在前面
最近学习区块链,区块的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))
}