使用sha256实现区块链时不同区块哈希值相同问题咨询
问题原因
- 核心错误是你对
crypto-js的sha256方法调用方式不符合要求:sha256仅接收1个入参作为待哈希的原始数据,你传入的this.timestamp、this.nonce、this.value、this.prevhash四个参数里,除第一个参数外剩下的都会被直接忽略,不会参与哈希计算。 - 进一步导致两个区块哈希完全相同的原因是,直接传入数字类型的字段时,
crypto-js内部无法正确识别解析,最终实际参与哈希计算的内容均为undefined,所以得到了固定的undefined对应的SHA256哈希值。
修复方案
你需要先把所有需要参与哈希计算的字段拼接为一个完整的字符串,再传给sha256方法,修改后的calculate方法参考如下:
calculate(){ // 把所有字段序列化为字符串后拼接,再传入sha256 const rawData = `${this.timestamp}${this.nonce}${this.value}${this.prevhash}` return String(sha256(rawData)); }
修改后两个区块的字段不同,拼接后的原始数据不同,得到的哈希结果就会有差异。
内容的提问来源于stack exchange,提问作者Data Universe
相关产品推荐
相关产品推荐

