Solidity
如何在區塊鏈中儲存 Excel 文件的雜湊?
如果這個問題似乎不合邏輯,我很抱歉。
我想通過以下功能
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
不像事實上,我不清楚的是如何使用這個函式之一:
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); }