node.js Расшифровать AES 128 ECB
Я пытаюсь расшифровать токен формата base64 с помощью AES 128-ecb на узле.
ключ: ed9d26Z0JES0X52Q (изменил некоторый символ, но длина верна)
токен: O4girrZ2YeLSE1sZ4FSIvp3Edm1GiwBLHmvDIEYCf+xkvbxP6EfYjy+PEB2kaYe0606EyPmlCC0iExVRq9e3Iw==
decodeToken(token) {
var key = new Buffer(exchangeKey, 'hex')
var encrypted = new Buffer(token, 'base64')
decipher = crypto.createDecipheriv("aes-128-ecb", key, '')
decipher.setAutoPadding(false)
result = decipher.update(encrypted).toString();
return result;
}
дает:
crypto.js: 239 this._handle.initiv (шифр, toBuf(ключ), toBuf(iv)); ^
Ошибка: недопустимая длина ключа при ошибке (собственная) при новом дешифровании (crypto.js:239:16) в Object.Decipheriv (crypto.js:236:12)
После некоторых поисков я нашел это:
// https://github.com/nodejs/node-v0.x-archive/issues/4744#issuecomment-25460050
var aesEcb = new MCrypt('rijndael-128', 'ecb')
aesEcb.open(exchangeKey);
var ciphertext = new Buffer(token, 'base64');
var plaintext = aesEcb.decrypt(ciphertext).toString();
return plaintext
что возвращает
f9712fa5-da4a-49fe-b81f-b48d8cfabf91275RAODW24RS
что выглядит как ожидаемый формат и длина, но обратите внимание на проводные символы в конце.
Я мог бы также использовать это решение (и обрезать лишние символы), но я хочу
- знать, что это за персонажи
- перекрестная ссылка на два результата
- использовать только один пакет npm (crypto)
1 ответ
Вы декодируете ключ как шестнадцатеричный, когда вы собираетесь использовать отдельные шестнадцатеричные символы в качестве байтов ключа. Не делай этого. У вас также отключены отступы. Включите отступы, чтобы удалить странные символы.