шифрование письма по алгоритму RSA - PullRequest
0 голосов
/ 22 апреля 2020

Мне дали (17,3233), и мне нужно зашифровать букву 'Z', используя номер ASCII. (Z = 90) 90 ^ 17 mod3233 = 1668, и это будет работать. Но я хочу знать, есть ли способ, которым я могу просто отправить один символ вместо целого числа 1668 и все же заставить его работать.

Ответы [ 2 ]

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

RSA не является потоковым шифром. Зашифрованный результат всегда имеет размер (биты) модуля - в вашем случае 3233.

Число 3233 требует 12 битов, однако один байт / символ обеспечивает только 8 битов. Следовательно, вы не можете отправить упакованный зашифрованный RSA текст в один байт. Вам нужно как минимум 2 байта.

Если вы можете упаковать целое число в символ, зависит от вашего определения символа:

char = (для печати) ASCII символ

A печатный символ ASCII обычно имеет 7 бит. Вы не можете хранить 12 бит в 7 битах.

char = byte

Стандартный символ эквивалентен байту и позволяет хранить 8 бит. Вы не можете хранить 12 бит в 8 битах.

char = Java UTF-16 char

Учитывая, что Java char является символом UTF-16, вы можете быть возможность сохранять целое число как один символ, однако хранение двоичных данных в Java UTF-16 char является очень грязным и хакерским решением sh. Я настоятельно рекомендую не реализовывать это! Двоичные данные не следует сохранять в символе (массиве) без надлежащего преобразования и кодирования (например, base64 шестнадцатеричного кодирования).

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

Все значения со знаком со знаком находятся в диапазоне от -128 до 127. Все значения без знака находятся в диапазоне от 0 до 255. Таким образом, единственный способ состоит в том, чтобы эти числа находились внутри этого диапазона.

...