Cryptography

在 C# 中創建雜湊並在 Solidity 中驗證

  • January 14, 2018

我正在嘗試建構一個將從 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# 中做到這一點。

您的函式接受bytes3232 字節長。但是在 C# 中,您只需要散列 3 個字節。在 C# 中,您需要填充零以使長度為 32。

引用自:https://ethereum.stackexchange.com/questions/36188