Solidity

如何在區塊鏈中儲存 Excel 文件的雜湊?

  • May 16, 2018

如果這個問題似乎不合邏輯,我很抱歉。

我想通過以下功能hash將文件儲存在區塊鏈中:Excel

//byte fileHash;
event LogsetFileHash(byte _hashValue);

   function setFileHash(byte hashValue) {
       emit LogsetFileHash(hashValue);
       //fileHash = hashValue; // In case storing hash value in a variable is NOT expensive, we store hash in a variable, otherwise, we save it only as an event log.  
   } 

問題是我如何使用數學和加密函式將我的Excel文件內容轉換為一個hash值,因為Excel文件的內容string/text不像pdf文件。

事實上,我不清楚的是如何使用這個函式之一:keccak256(...) returns (bytes32)sha256(...) returns (bytes32)返回_hashValue variable?還有哪個更好用?(如果雜湊大小不同。)

您可以將文件轉換為 base64 併計算字元串序列的雜湊值。在將交易送出到智能合約之前,您需要在鏈下執行此操作。

例如index.js

var fs = require('fs');
var keccak256 = require('js-sha3').keccak256;

var hash1 = hashFile('sample1.xlsx');
console.log("sample1.xlsx: " + hash1);
var hash2 = hashFile('sample2.xlsx');
console.log("sample2.xlsx: " + hash2);


function hashFile(file) {
   var body = fs.readFileSync(file);
   return keccak256(body.toString('base64'));
}

$ node index.js 
sample1.xlsx: 6f908b0facccb5008eb05214a7406300192a59db69bf7c2d979bfa8404b094b1
sample2.xlsx: 3d4e1062085c24da7af7c955d54fc89fa5670dc74bc0521db46ec3ceb4ef9109

然後可以將雜湊值轉換為 bytes32 變數:

event LogsetFileHash(bytes32 _hashValue);

function setFileHash(bytes32 _hashValue) {
   emit LogsetFileHash(_hashValue); 
}

範常式式碼

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