Функция сопоставления от java до javascript с использованием крипто- js с ArrayBuffer? - PullRequest
0 голосов
/ 10 июля 2020

Я потерялся на этом:

Я пытаюсь сопоставить следующий Java Код в JS / TS с помощью Crypto- JS (AES-128):

public static byte[] Encrypt(byte[] src, byte[] key) {
    try {
        SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
        Ciper ciper           = Cipher.getInstance("AES/ECB/NoPadding");
        cipher.init(Cipher.ECNRYPT_MODE, keySpec);
        byte[] encrypted = cipher.doFinal(src);
        return encrypted;
    }
    catch(Exception ex) {
        return null;
    }
  }

До сих пор я придумал:

import * as CryptoJS from 'crypto-js';

function foo() {
    const keyBuffer      = new ArrayBuffer(16);
    const keyView        = new Uint8Array(keyBuffer);
    keyView.set([0x01, 0x02, // more bytes...])

    const frameBuffer    = new ArrayBuffer(16);
    const frameView      = new Uint8Array(frameBuffer);
    frameView.set([0xAA, 0xAB, // more bytes ...]);

    const waKey   = CryptoJS.lib.WordArray.create(keyBuffer);
    const waFrame = CryptoJS.lib.WordArray.create(frameBuffer);

    const res = CryptoJS.AES.encrypt(
      waKey,
      waFrame,  // <---- does not work because waFrame is of type LibWordArray not WordArray
      {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.NoPadding
      }
    );

    console.log('WordArray: ', res);

    const hexString = res.toString(CryptoJS.enc.Hex);
    console.log('hexString: ', hexString.length, hexString);
  }

Поскольку мне нужно использовать ECB, мне не нужно предоставлять IV при передаче ключа. Но я уже застрял в преобразовании ArrayBuffer для ключа в WordArray, чтобы его можно было использовать при вызове encrypt().

Согласно документации я не могу пройти в строке, так как это будет рассматриваться как 256-битный ключ.

Как сопоставить функцию java с javascript с помощью крипто- js?

...