Как исправить ошибку «неверный размер зашифрованного текста» в Javascript?(AES) - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь расшифровать данные с помощью ключа и библиотеки AES-JS. Всякий раз, когда я ставлю 16-байтовый ключ, я получаю следующую ошибку:

Ошибка: «неверный размер зашифрованного текста (должен быть 16 байтов)»

Я уже пытался изменить ключ на значение, отличное от 16 байтов, но затем я получаю эту ошибку:

Ошибка: «неверный размер ключа (должен быть 16, 24 или 32 байта)»

Вот мой код:

export const getEventBlockData = (cm, eventBlockData) => {
  const encryptedBlockBuf = Buffer.from(eventBlockData, 'base64');
  const aes = new aesjs.AES(aesjs.utils.utf8.toBytes('1111111111111111'));
  const decryptedBlockBuffer = new Buffer(aes.decrypt(encryptedBlockBuf));
};

Часть, которая генерирует ошибку, является последней строкой с aes.decrypt(...

Примечание: cm var должен быть ключом, но для целей тестирования я заменил его строкой "1111111111111111", а eventBlockData - буфер, который я пытаюсь расшифровать, он имеет следующую форму:

Event Block Data :{"type":"Buffer","data":[49,56,53,50,55,51,53,49,50,50,48,48,48,49,48,48,48,48,49]} cm-service.js:61
Encrypted Block buff :{"type":"Buffer","data":[49,56,53,50,55,51,53,49,50,50,48,48,48,49,48,48,48,48,49]}

Спасибо за ваше время! :)

1 Ответ

0 голосов
/ 16 января 2019

На самом деле ошибка говорит о invalid ciphertext size (must be 16 bytes), поэтому проблема не в вашем key, а изменение длины key, как вы сказали в своем посте, не решит проблему, поскольку это не касается ключ.

Это распространенная и известная проблема , касающаяся длины открытого текста в CBC и возникает при использовании зашифрованного текста с длиной, отличной от 16 байтов.

Чтобы решить эту проблему, вам нужно добавить заполнение для вашего зашифрованного текста, для более подробной информации вы можете прочитать Почему все входы в AES должны быть кратны 16? .

...