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 ответ

Решение

Вы декодируете ключ как шестнадцатеричный, когда вы собираетесь использовать отдельные шестнадцатеричные символы в качестве байтов ключа. Не делай этого. У вас также отключены отступы. Включите отступы, чтобы удалить странные символы.

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