gpt4 book ai didi

javascript - 使用 node-jose,如何解密刚刚加密的数据?

转载 作者:搜寻专家 更新时间:2023-10-31 22:51:26 32 4
gpt4 key购买 nike

我正在尝试使用 node-jose 实现简单的 JOSE encryptdecrypt 函数.

我的代码如下(使用Node 8.2.1编写)

const { JWE } = require('node-jose');

const jose = (publicKey, privateKey) => {
async function encrypt(raw) {
if (!raw) throw new Error('Missing raw data.')
const buffer = new Buffer(JSON.stringify(raw));
return JWE.createEncrypt(publicKey).update(buffer).final();
}

async function decrypt(encrypted) {
if (!encrypted) throw new Error('Missing encrypted data.')
const buffer = new Buffer(JSON.stringify(encrypted));
return JWE.createDecrypt(privateKey).decrypt(buffer);
}

return { encrypt, decrypt }
}

module.exports = jose;

我使用 generate-rsa-keypair 生成一个 RSA key 对.

因此通过此代码测试事物的加密方面工作正常

const { JWK } = require('node-jose');
const keygen = require('generate-rsa-keypair');
const jose = require('./src/utils/jose');

const rawKeys = keygen();

const makeKey = pem => JWK.asKey(pem, 'pem');

async function start() {
const publicKey = await makeKey(rawKeys.public)
const privateKey = await makeKey(rawKeys.private)

const raw = {
iss: 'test',
exp: new Date().getTime() + 3600,
sub: {
test: 'This is a test',
},
};

const { encrypt, decrypt } = jose(publicKey, privateKey);

return encrypt(raw).then(encrypted => decrypt(encrypted));
}

return start().then((result) => {
console.log('decrypted', result)
}, (err) => {
console.error(err);
});

加密的结果是

{
recipients: [ { encrypted_key: 'ciNiK6Unq30zCAXxIl2Dx9b8bZAi79qbpL1yUCwTFnSghFLrIZ11_D2ozt5on3r3ThUu96oDLZPcNShbqWPMV49NvQAsSNGdemhgzmTt3Lf3rJn1YiqvJvqf5NIXdmzjdoEZi-d9224mGpZGVKtIIFeT6-0hYgm5zNqq_aF_X2jy5IiF-mAGspNdXIk_KXPrTVbnU-XL9J5aAoG2Lp51Te1WzGA4Fjg4Ve5ZTzH6TLlQ5R5Ob_14liK-INrSi3armwXrtMgJcTmI_4oBtORtZp8AjaXzecFO_GzifvRVCSKx2vmpy9KaECpskMhZBHVx9RX9cvGKh7hq3Y7vsUucZw' } ],
protected: 'eyJhbGciOiJSU0EtT0FFUCIsImtpZCI6IldLWS1ONDRXM2RnanA4U2ZxSlp3TldqV3AzUG1XZ29UczhjRDh3eWNSUWciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0',
iv: 'wvqir2ewtQPfDHQtzl6IUg',
ciphertext: 'ZwIrL_3739LI17rh3gWDUA6lXIL7ewkSh54FO_RwumC0qh9B0DcAr8RyXsfPbW19cV4u7SbZNSRP6B8qNOTy-2iENlqBISfE_kolDt8g5sg',
tag: 'z8nwrJfRgOi1hYMBI9lGeQ'
}

但是当我尝试解密时,我得到了

Error: no key found
at processKey (node_modules/node-jose/lib/jwe/decrypt.js:157:22)

使用 node-jose 的例子很少,所以我不确定以下内容

  1. 我假设我应该用私钥解密。但这只是一个假设。所有示例均未显示使用公钥/私钥对,仅显示单个 key 。
  2. 我假设加密的结果可以被字符串化并变成一个缓冲区并传递给 decrypt 但也许事实并非如此。

这究竟是如何运作的?

最佳答案

  1. 当使用公钥/私钥对时,私钥用于解密,公钥用于加密。

    <
  2. JWEDecrypter.decrypt() 的输入是 JWEEncrypter.final() 的 promise 输出。

将您的 decrypt 函数更改为:

async function decrypt(encrypted) {
if (!encrypted) throw new Error('Missing encrypted data.')
return JWE.createDecrypt(privateKey).decrypt(encrypted);
}

关于javascript - 使用 node-jose,如何解密刚刚加密的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45475145/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com