javascript 导入js-sha 256

ddarikpa  于 2022-12-25  发布在  Java
关注(0)|答案(2)|浏览(110)
  • 嗨,我有一个简单的代码创建一个"区块链"。当我运行代码时,它给了我一个错误。*
    这是错误

从"js-sha256"导入{sha256}; ^
语法错误:意外的标记{...}

    • 我认为 "sha256" 函数中的错误我已经安装了 "js-sha256" 的所有软件包。**
    • 密码**
import { sha256 } from 'js-sha256';

class Block {

    constructor(timestamp, data, previousHash = '') {

        this.timestamp = timestamp;
        this.data = data;
        this.previousHash = previousHash;

        this.hash = this.calculateHash(); }

    calculateHash() {
        return sha256(this.previousHash + this.timestamp + JSON.stringify(this.data)).toString();
    }
}

class BlockChain {
    constructor() {
        this.chain = [this.createGenesisBlock()];
    }

    createGenesisBlock(){
        return new Block("2018-11-11 00:00:00", "Genesis block of simple chain", "");
    }

    getLatestBlock() {
        return this.chain[this.chain.length - 1];
    }

    addBlock(newBlock) {

        newBlock.hash = newBlock.calculateHash();

        this.chain.push(newBlock);
    }

    isChainValid() {
        //Traverse all the blocks
        for (let i = 1; i < this.chain.length; i++) {
            const currentBlock = this.chain[i];
            const previousBlock = this.chain[i - 1];

            if (currentBlock.hash !== currentBlock.calculateHash()) {
                console.error("hash not equal: " + JSON.stringify(currentBlock));
                return false;
            }

            if (currentBlock.previousHash !== previousBlock.calculateHash) {
                console.error("previous hash not right: " + JSON.stringify(currentBlock));
                return false;
            }
        }
        return true;
    }
}


let simpleChain = new BlockChain();

simpleChain.addBlock(new Block("2018-11-11 00:00:01", {amount: 10}));
simpleChain.addBlock(new Block("2018-11-11 00:00:02", {amount: 20}));

console.log(JSON.stringify(simpleChain, null, 4));

console.log("is the chain valid? " + simpleChain.isChainValid());
2wnc66cl

2wnc66cl1#

Node v11并不正式支持ES模块,但只支持其中的一部分,并且只支持--experimental-modules标志和.mjs扩展。
所以据我所知,你要么:

  • .mjs重命名你的JS文件,然后运行node --experimental-modules index.mjs(不是很推荐,但是在回答的最后提到了一些小的编辑)
  • 使用babel-node(绝对不推荐)
  • 在开发中使用babel@babel/register,并构建要部署的生产代码。

顺便说一下,它似乎是您正在寻找的默认导出,而不是命名导出,即:
import sha256 from 'js-sha256';

okxuctiv

okxuctiv2#

在现代浏览器中,只需使用内置的Crypto API

const text = 'hello';

async function digestMessage(message) {
  const msgUint8 = new TextEncoder().encode(message);                           // encode as (utf-8) Uint8Array
  const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);           // hash the message
  const hashArray = Array.from(new Uint8Array(hashBuffer));                     // convert buffer to byte array
  const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string
  return hashHex;
}

const result = await digestMessage(text);
console.log(result)

然后可以通过online sha256 tool验证结果。

相关问题