Я потерялся на этом:
Я пытаюсь сопоставить следующий 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?