当前位置: 首页 > 知识库问答 >
问题:

使用openpgp库在节点上运行时出现意外标识符

莫欣悦
2023-03-14

我正在使用节点进行OpenPGP加密。这是我的参考库。当我运行一个演示,我得到以下错误。

 var openpgp = require('openpgp'); // use as CommonJS, AMD, ES6 module or via window.openpgp

openpgp.initWorker({ path:'openpgp.worker.js' })


// put keys in backtick (``) to avoid errors caused by spaces or tabs
const pubkey = `-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----`
const privkey = `-----BEGIN PGP PRIVATE KEY BLOCK-----
...
-----END PGP PRIVATE KEY BLOCK-----` //encrypted private key
const passphrase = `yourPassphrase` //what the privKey is encrypted with

const encryptDecryptFunction = async() => {
    console.log("init",openpgp)
    const privKeyObj = (await openpgp.key.readArmored(privkey)).keys[0]
    await privKeyObj.decrypt(passphrase)

    const options = {
        message: openpgp.message.fromText('Hello, World!'),       // input as Message object
        publicKeys: (await openpgp.key.readArmored(pubkey)).keys, // for encryption
        privateKeys: [privKeyObj]                                 // for signing (optional)
    }
    console.log("init",options)
    openpgp.encrypt(options).then(ciphertext => {
        encrypted = ciphertext.data // '-----BEGIN PGP MESSAGE ... END PGP MESSAGE-----'
        return encrypted
    })
    .then(encrypted => {
        const options = {
            message: await openpgp.message.readArmored(encrypted),    // parse armored message
            publicKeys: (await openpgp.key.readArmored(pubkey)).keys, // for verification (optional)
            privateKeys: [privKeyObj]                                 // for decryption
        }

        openpgp.decrypt(options).then(plaintext => {
            console.log(plaintext.data)
            return plaintext.data // 'Hello, World!'
        })

    })
}

encryptDecryptFunction()

共有1个答案

唐阳晖
2023-03-14

await不能在异步函数之外使用。您可以将async添加到。然后,这样您就可以在里面使用await。

.then(async(encrypted) => {
    const options = {
        message: await openpgp.message.readArmored(encrypted),    // parse armored message
        publicKeys: (await openpgp.key.readArmored(pubkey)).keys, // for verification (optional)
        privateKeys: [privKeyObj]                                 // for decryption
    }

    openpgp.decrypt(options).then(plaintext => {
        console.log(plaintext.data)
        return plaintext.data // 'Hello, World!'
    })

})

但是我更倾向于建议按照以下方式重构代码,以消除多余的代码。您不需要它们,因为您使用Async/await。

const encryptDecryptFunction = async () => {
    console.log("init", openpgp)
    const privKeyObj = (await openpgp.key.readArmored(privkey)).keys[0]
    await privKeyObj.decrypt(passphrase)

    const options = {
        message: openpgp.message.fromText('Hello, World!'),       // input as Message object
        publicKeys: (await openpgp.key.readArmored(pubkey)).keys, // for encryption
        privateKeys: [privKeyObj]                                 // for signing (optional)
    }
    console.log("init", options)
    const { data: encripted } = await openpgp.encrypt(options)

    const options = {
        message: await openpgp.message.readArmored(encrypted),    // parse armored message
        publicKeys: (await openpgp.key.readArmored(pubkey)).keys, // for verification (optional)
        privateKeys: [privKeyObj]                                 // for decryption
    }

    const plaintext = await openpgp.decrypt(options);
    console.log(plaintext.data)
    return plaintext.data // 'Hello, World!'
}
 类似资料:
  • 我是ReactJS世界的新手,帮助一个团队将他们的React应用程序部署到Docker容器。我做了以下任务。 在EC2中创建Ubuntu机器并安装Docker引擎 /usr/src/app/src/index。js:1从“React”导入React^^^^^ _compile(内部/模块/cjs/loader.js:723: 23)在对象。_extensions... js(内部/模块/cjs/l

  • 尝试运行lint脚本时出现问题 我不断得到这个错误提示,它似乎只发生在更新我的eslint deps符合airbnb规则(我使用) 错误: 但是,运行以下工作预期: 这是我的. eslintrc文件: 这些是我目前的eslint deps: 任何帮助将是伟大的!非常感谢!

  • 问题内容: 我在运行Java项目时遇到问题。 它使用maven编译,最终得到.jar文件。我今天决定,我将使用log4j代替wimple System.out进行日志记录…在此更改之前,它工作正常 这是我的运行方式 SRV_ADDR指向我的service.jar(带有Launcher类) SRV_LIBS指向log4j-1.2.16.jar 我加了“。;” 一开始希望它会有所帮助,因为提到的文件在

  • 我的一台远程机器上有硒集线器,其他机器也有硒节点。 是有集线器的机器,我有一个本地节点和一个远程节点。 两者都连接到远程集线器,但是chrome不在远程节点上运行,而是在本地运行。 当我运行上面的代码(在远程节点上)时,我得到以下异常: 硒。常见的例外。WebDriverException:Message:u“未知错误:Chrome无法启动:崩溃\n(驱动程序信息:chromedriver=2.1

  • 所有,我这里有一些无法解释行为的代码。它贴在下面。我看了为什么整数溢出会导致C iostream的错误?,但它并没有真正回答我的问题。 因此,我希望这段代码所做的是读入一个整数,打印出该整数的值,读入另一个整数(到同一个变量中),然后打印出这个整数。如果我输入7和2,那么它将按预期工作。但是,如果我为第一个和第二个输入输入2^31(溢出整数1),则第一个输出将显示“x的值=-2147483648”