【问题标题】:Unable to create decrypt using base 64 key with node-jose无法使用带有 node-jose 的 base 64 密钥创建解密
【发布时间】:2019-04-02 06:17:55
【问题描述】:

我正在尝试使用 the node-jose library 来解密 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

我在初始化密钥时做错了吗?任何帮助将不胜感激。

【问题讨论】:

    标签: node.js jwt jwk


    【解决方案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);
          })
      });
    

    【讨论】:

      猜你喜欢
      • 2022-12-17
      • 2021-08-27
      • 1970-01-01
      • 2013-05-23
      • 2019-06-11
      • 1970-01-01
      • 2012-05-08
      • 2018-10-17
      • 1970-01-01
      相关资源
      最近更新 更多