Преобразование кода шифрования и кодирования (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 небезопасен.