Cryptography
在 C# 中創建雜湊並在 Solidity 中驗證
我正在嘗試建構一個將從 javascript 呼叫契約的應用程序。我希望契約驗證參數沒有被篡改。為了做到這一點,我的計劃是找出伺服器端的參數,對參數組合進行雜湊處理,並對雜湊進行簽名。我會將散列和簽名傳遞給契約以供契約驗證。散列將證明參數沒有改變,簽名將證明我生成了散列。
我目前正在嘗試找出散列部分。
void Main() { var bytes = ASCIIEncoding.ASCII.GetBytes("abc"); SHA256 hasher = SHA256Cng.Create(); var hashed = hasher.ComputeHash(bytes); Console.WriteLine(BitConverter.ToString(hashed).Replace("-", string.Empty)); }
給我一個輸出
BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD
在柵欄的另一邊,我有
pragma solidity 0.4.18; contract HashCheck { function hash(bytes32 toHash) public returns(bytes32) { bytes32 hashed = sha256(toHash); return hashed; } }
返回
truffle(development)> f.hash.call("abc") '0x26426d7cb06a12643ccfe84107603083d835c37f000a12f734137a0c8df77f26'
我很高興嘗試 keccak (sha3) 散列,但我還沒有弄清楚如何在 C# 中做到這一點。
您的函式接受
bytes32
32 字節長。但是在 C# 中,您只需要散列 3 個字節。在 C# 中,您需要右填充零以使長度為 32。