【问题标题】:Invalid key length error using createDecipheriv from crypto使用来自加密的 createDecipheriv 的无效密钥长度错误
【发布时间】:2020-07-21 08:51:00
【问题描述】:

我需要使用带 CBC 模式的三重 DES 编码来解密数据。上面的这段代码是最后一次尝试。当解密器被创建时,我得到了休闲错误:

Error: Invalid key length
    at Decipheriv.createCipherBase (internal/crypto/cipher.js:103:19)
    at Decipheriv.createCipherWithIV (internal/crypto/cipher.js:121:20)
    at new Decipheriv (internal/crypto/cipher.js:262:22)
    at Object.createDecipheriv (crypto.js:127:10)
    at Object.decrypt3DES (/home/didimo/projetos/node_anna_server/src/utils/exeCrypto.ts:132:25)
    at /home/didimo/projetos/node_anna_server/src/controllers/annaController.ts:67:19
    at step (/home/didimo/projetos/node_anna_server/src/controller`enter code here`s/annaController.ts:33:23)
    at Object.next (/home/didimo/projetos/node_anna_server/src/controllers/annaController.ts:14:53)
    at /home/didimo/projetos/node_anna_server/src/controllers/annaController.ts:8:71
    at new Promise (<anonymous>)

这是我的代码:

  var data = "XAWHNurb7eQRxbA/vuC09Q==";
  var iv = "O6VMaT2M9Pk=";
  var key = "UqOKIBu82BMiz4hEh+TqJpobsO9DonWo";

  var crypto = require("crypto");
  var alg = "des-ede-cbc";

  var keyBuffer64 = new Buffer(key, "base64");
  var keyBufferUtf8 = new Buffer(keyBuffer64.toString("utf8"), "utf8");

  var ivBuffer64 = new Buffer(iv, "base64");
  var ivBufferUtf8 = new Buffer(ivBuffer64.toString("utf8"), "utf8");

  var encryptedData = new Buffer(data, "base64");

  var decipher = crypto.createDecipheriv(alg, keyBufferUtf8, ivBufferUtf8);
  var decoded = decipher.update(encryptedData, "base64", "utf8");
  decoded += decipher.final("utf8");

  return decoded;

【问题讨论】:

    标签: node.js cryptojs 3des cbc-mode


    【解决方案1】:

    3 天后,我通过反复试验发现了答案,缺少将 iv 和键值转换为十六进制。我希望这篇文章对某人有帮助,呵呵。

      var data = "aNwsjalhzHnZc0UvMjt8CA==";
      var iv = "O6VMaT2M9Pk=";
      var key = "JajN48do5d/p5EMk2AsxUiedQd7eusdK";
    
      var ivBufferHex = Buffer.from(iv, "base64").toString("hex");
      var keyBufferHex = Buffer.from(key, "base64").toString("hex");
    
      var decipher = crypto.createDecipheriv(
        "des-ede3-cbc",
        Buffer.from(keyBufferHex, "hex"),
        Buffer.from(ivBufferHex, "hex")
      );
      decipher.setAutoPadding(true);
      var decryptedData = decipher.update(data, "base64", "utf8");
      decryptedData += decipher.final("utf8");
    
      return decryptedData;
    
    

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 2021-03-02
      相关资源
      最近更新 更多