String

Keccak256(參數)如何傳遞要散列的字元串?

  • May 23, 2017

我正在嘗試做一些理論上非常簡單的事情:我想將像“hello”這樣的字元串傳遞給一個函式,然後計算 sha3/keccak256 雜湊。我認為問題在於,如果參數是 a bytes32(就像現在一樣),散列函式將產生不同的輸出。

如何在智能合約中使用這兩種方法獲得相同的雜湊值?在實踐中,如何在以下程式碼中獲得返回 true ?

function someFunction(bytes32 _string) returns(bool){
   bool result = false;
   bytes32 hashparameter = sha3(_string);
   bytes32 hashstring = sha3("hello");
   if(hashstring == hashparameter) {
       result = true;
   }

   return result;

}

如何截斷傳遞的bytes32內容,使其僅考慮 sha3 的前 5 個字節?

感謝您的寶貴時間,希望您有解決方案。如果我能找到一些東西,我會更新問題。

試試這個片段

function bytes32ToString(bytes32 x) constant returns (string) {
   bytes memory bytesString = new bytes(32);
   uint charCount = 0;
   for (uint j = 0; j < 32; j++) {
       byte char = byte(bytes32(uint(x) * 2 ** (8 * j)));
       if (char != 0) {
           bytesString[charCount] = char;
           charCount++;
       }
   }
   bytes memory bytesStringTrimmed = new bytes(charCount);
   for (j = 0; j < charCount; j++) {
       bytesStringTrimmed[j] = bytesString[j];
   }
   return string(bytesStringTrimmed);
}

function someFunction(bytes32 _string) returns(bool){
   bool result = false;
   bytes32 hashparameter = sha3(bytes32ToString(_string));
   bytes32 hashstring = sha3("hello");
   if(hashstring == hashparameter) {
       result = true;
   }

   return result;

}

第一個函式將 bytes32 轉換為字元串,然後將結果傳遞給散列函式。我試過它給出了“你好”的真值。

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