Что означает пропуск байтов при расшифровке с помощью RC4? - PullRequest
1 голос
/ 19 апреля 2020

У меня есть двоичные данные, которые мне нужно расшифровать, алгоритм (RC4) и ключ. Однако для расшифровки данных я получил одну инструкцию: «длина ключа изначально пропущена» или «длина байтов пропущена изначально».

Что это значит точно? Означает ли это, что если мой ключ имеет длину 10 байтов, то мне нужно передать двоичные данные без первых 10 байтов в расшифровщик, а затем объединить первые 10 байтов с расшифрованными байтами?

const decipher = crypto.createDecipheriv('RC4', 'mysuperkey', null);
const buffer = decipher.update(data.slice('mysuperkey'.length));

decipher.final();

Это не работает, поэтому я могу не понять инструкцию.

1 Ответ

0 голосов
/ 19 апреля 2020

RC4 небезопасен для первых битов, поэтому часто вас просят пропустить некоторые начальные байты ключевого потока . Принцип работы потокового шифра заключается в том, что он создает поток псевдослучайных данных, который зависит от ключа. Этот поток обрабатывается XOR открытым текстом для создания зашифрованного текста и зашифрованным текстом для создания открытого текста.

Чтобы пропустить количество байтов ключевого потока, вы можете просто зашифровать / расшифровать некоторые (с нулевым значением) байты и выбросить результаты. Это касается как шифрования, так и дешифрования. Если у API есть определенный метод c skip, то вы, конечно, должны его использовать, но я не думаю, что он присутствует в Crypto JS.

...