crypto-js 错误的 des-ecb 解码

crypto-js wrong des-ecb decoding

我需要使用带 ECB 模式的 base64 密钥和使用 DES 的 Iso10126 填充来解密 base64 字符串。

理论上很简单:

const decryptedKeyDes = CryptoJS.DES.decrypt(
      encryptedData, // QAKH7qnKxZTIta...
      ResponseParser.secretKey, // MfKhm... length=32
      {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Iso10126
      }
    );

我得到 sigBytes:162 响应,在将其转换为 base64 后(因为那时我需要解压缩)我得到 byteLength:243 这是错误的,它应该是 byteLength:395 (我只是将其与我正确的 Java 代码进行比较)。

我不知道这里出了什么问题。

我也尝试使用 node.js 的 crypto 来做到这一点,但我也得到了错误和不同的结果。我找不到如何在 crypto 中设置 padding,我只能得到 utf8binaryascii

function encodeDesECB(textToEncode, keyString) {
      var key = new Buffer(
        "some key with 32 length".substring(0, 8),
        "utf8"
      );
      var cipher = crypto.createDecipheriv("des-ecb", key, null);
      cipher.setAutoPadding(false);
      var c = cipher.update(textToEncode, "base64", "utf8");

      c += cipher.final("utf8");
      return c;
    }

java代码是:

import javax.crypto.Cipher
import static javax.crypto.Cipher.DECRYPT_MODE

//CIPHER_ALGORITHM_MODE_PADDING = 'DESede/ECB/ISO10126Padding'

Cipher decryptingCipher = Cipher.getInstance(CIPHER_ALGORITHM_MODE_PADDING)
      decryptingCipher.init(DECRYPT_MODE, secretKeySpec)
      decryptingCipher.doFinal(data)

其中 secretKeySpecalgorithm: DESedekey 的对象,bit[] 等于我的

我不知道我的代码有什么问题。

CryptoJs 是不是工作不正常,或者我在解码时忘记了什么。

你有什么线索可以出错吗?

感谢@Topaco,我终于解决了。

密钥必须是 WordArray: CryptoJS.enc.Base64.parse('some key with 32 length')

消息必须是 base64 字符串:QAKH7qnKxZTIta...;

然后你需要像这样解析响应:tripleDesResult.toString(CryptoJS.enc.Base64)

再次感谢!