SHA256的结果错误超出预期

时间:2018-01-08 04:36:56

标签: javascript cryptography bitcoin sha256 cryptojs

我试图从已知的公钥中获取比特币地址。使用CryptoJS.SHA256对公钥进行散列时,我得不到预期的结果

CryptoJS.SHA256("0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6").toString(CryptoJS.enc.Hex)

得到我:

  

32511e82d56dcea68eb774094e25bab0f8bdd9bc1eca1ceeda38c7a43aceddce

我想要的时候:

  

600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

我错过了什么?

1 个答案:

答案 0 :(得分:0)

这只是一个编码问题 - 不要尝试对十六进制进行散列,对二进制进行散列。

例如,这里是将十六进制解码为二进制时的哈希计算(使用Haskell,因为我很方便):

Prelude> import Crypto.Hash.SHA256
Prelude Crypto.Hash.SHA256> let str = "0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6"
Prelude Crypto.Hash.SHA256> Data.ByteString.Base16.encode $ hash $ fst $  Data.ByteString.Base16.decode $ Data.ByteString.Char8.pack str
"600ffe422b4e00731a59557a5cca46cc183944191006324a447bdb2d98d4b408"