0

我正在尝试使用node-jose来解密 JWE,但是在使用密钥的 base64 作为密钥时遇到了问题(作为外部 API 指示我这样做)。

const crypto = require('crypto');
const jose = require('node-jose');

const secret = 'mySecret';
let hash = crypto.createHash('sha512');
let data = hash.update(secret, 'utf-8');
let token = getToken(); // Token is a correctly formatted JWE
const key = JSON.stringify({ key: data.digest('base64'), kty: 'oct', alg: 'HS512', use: 'enc' });

jose.JWK.asKey(key).
  then(function (result) {

    jose.JWE.createDecrypt(result.keystore).
      decrypt(token).
      then(function (result) {
        console.log(result);
      }).catch(err => {
        console.log(err);
      });
  });

这将返回以下错误:

Error: no key found

我在初始化密钥时做错了什么吗?任何帮助将非常感激。

4

1 回答 1

1

设法让它自己使用以下内容:

const crypto = require('crypto');
const jwt = require('jsonwebtoken');
const jose = require('node-jose');

const secret = 'mySecret';
let token = getToken(); // Token is a correctly formatted JWE

let keystore = jose.JWK.createKeyStore();

// *****The crucial bit*****
const bufferderived = crypto.createHash('sha512')
      .update(secret)
      .digest()
      .slice(0, 512 / 8);

keystore.add({
  k: bufferderived, 
  kty: 'oct',
  alg: 'dir'
})
  .then(function (result) {
    console.log(result);

    jose.JWE.createDecrypt(keystore).
      decrypt(token).
      then(function (result) {
        const decryptedToken = result.plaintext.toString('utf8');
        const decoded = jwt.decode(decryptedToken);
      }).catch(err => {
        console.log(err);
      })
  });
于 2018-10-29T14:56:10.280 回答