Я пытаюсь воспроизвести шифрование, используемое в приложении Java, с помощью Javascript и CryptoJS. Я не совсем уверен, как мне следует реплицировать SecretKeySpec, поскольку похоже, что CryptoJS ожидает строку для ключа.
Вот код шифрования Java, который мне нужно воспроизвести в JS:
public byte[] encrypt(byte[] origin)
{
String key = "testkey";
SecretKeySpec sks = new SecretKeySpec(convertAESKey(key), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] iv = new byte[16];
cipher.init(Cipher.ENCRYPT_MODE, sks, new IvParameterSpec(iv));
return cipher.doFinal(origin);
}
private byte[] convertAESKey(String key)
{
byte[] keyBytes;
keyBytes = key.getBytes("UTF-8");
byte[] keyBytes16 = new byte[16];
System.arraycopy(keyBytes, 0, keyBytes16, 0,
Math.min(keyBytes.length, 16));
return keyBytes16;
}
}
Мой код JS на данный момент:
var iv = new Uint8Array(16);
var key = "testkey";
var encrypted = CryptoJS.AES.encrypt(
someByteArray,
key,
{
iv: iv,
mode: CryptoJS.mode.CBC
}
);
Кроме того, окончательный вывод cipher - это зашифрованный массив байтов. Окончательный вывод CryptoJS выглядит как объект с cipherText. Есть ли способ получить вывод в виде байтового массива?
Единственное, что я мог сейчас придумать, - это преобразовать зашифрованный ответ в строку, а затем преобразовать ее в массив байтов, но, похоже, это не соответствует выходу шифрования Java.