Преобразование кода шифрования и кодирования (AES, UTF-8 и base64) из JAVA в node.js дает разные результаты

Обновление: мне наконец-то удалось воссоздать весь Java-код в соответствии с требованиями стороннего сервиса. Я должен добавить, что некоторые из используемых библиотек устарели, но я ничего не могу сделать, потому что это то, что использует другая сторона, и я должен соблюдать.

Java-код

   SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(),
    "AES");
   Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
   cipher.init(1, secretKeySpec);

   byte[] aBytes = cipher.doFinal(inputString.getBytes());

Ключ ввода: xxxxxxxxyyyyyyyy
Входной текст: maryhadalittlelamb

Выход: Z22GETg3Anl92%2BoyqdVWs9haQveaZxkDn8sQYP08iCY%3D

Код узла.js

var cipher = crypto.createCipher('aes-128-ecb', key);
var encryptedPassword = cipher.update(text, 'utf8', 'base64');
encryptedPassword += cipher.final('base64');
console.log(encryptedPassword);

Ключ ввода: xxxxxxxxyyyyyyyy
Входной текст: maryhadalittlelamb

Выходные данные: mnqrpA2eqAhmseTrkBtH3YSGMoFs+ECPUamVd8/bgAQ=

Выход для одной входной строки и ключа различен для обоих. На самом деле node.js отличается, но base64 выглядит одинаково.

Я довольно новичок в этих вещах, поэтому я потерял свою силу.

1 ответ

В файле node.js вы кодируете входную строку base64 перед шифрованием, это должен быть вывод из шифрования, который должен быть закодирован в base64.

Кроме того, вам нужно позвонить cipher.final(..) после cipher.update(..) завершить операцию шифрования. Не забудьте захватить вывод из обоих.

В дополнение к этому, обратите внимание, что режим ECB небезопасен.

Другие вопросы по тегам