crypto- js неправильное декодирование des-ecb - PullRequest
0 голосов
/ 17 февраля 2020

Мне нужно расшифровать строку base64, используя ключ base64 с режимом ECB, и заполнение Iso10126, используя DES.

Теоретически это просто:

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 но я тоже ошибаюсь и другой результат. Я не могу найти, как установить padding в crypto, и я могу получить только utf8, binary или ascii

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)

, где secretKeySpec - это объект с algorithm: DESede и key, что bit[] равно моему.

Я понятия не имею, что не так в моем коде.

Работает ли CryptoJs неправильно, или, может быть, я что-то забыл в своем декодировании.

У вас есть какие-нибудь подсказки, что может быть не так?

1 Ответ

0 голосов
/ 17 февраля 2020

Благодаря @Topaco я наконец решил это.

Ключ должен быть WordArray: CryptoJS.enc.Base64.parse('some key with 32 length')

Сообщение должно быть строкой base64: QAKH7qnKxZTIta...;

Затем вам нужно проанализировать ответ следующим образом: tripleDesResult.toString(CryptoJS.enc.Base64)

Еще раз спасибо!

...