Я пытаюсь реплицировать шифрование, используемое в приложении Java, используя Javascript и CryptoJS. Я не совсем уверен, как мне следует копировать SecretKeySpec, так как кажется, что CryptoJS ожидает строку для ключа.Java AES Шифрование в Javascript с использованием 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
}
);
Кроме того, конечный результат шифра является зашифрованным массив байтов , Конечным результатом CryptoJS является объект cipherText. Есть ли способ получить результат как массив байтов?
Единственное, о чем я мог подумать, это преобразовать зашифрованный ответ в строку, а затем преобразовать его в массив байтов, но это, похоже, не соответствует выходу Java-шифрования.
Использование шифрования из коробки работает для меня без проблем. Проблема заключается в копировании Java-шифрования, поскольку текущая реализация - это клиент (Java) на сервер (Java), и мне нужно сделать ее Client (Javascript) на сервере (Java). Код сервера не может измениться, поэтому важно иметь возможность точно соответствовать шифрованию. – mildse7en