Я хочу зашифровать и расшифровать ASCII-сообщения, используя алгоритм RSA, написанный на сборке. Я читал, что по соображениям безопасности и эффективности шифрование обычно не называется символьным, но несколько символов сгруппированы и зашифрованы вместе (например, wikipedia говорит, что 3 символа сгруппированы). Предположим, что мы хотим зашифровать сообщение «aaa», группирующее 2 символа. «aaa» хранится как 61616100. Если мы сгруппируем два символа и зашифруем полученные полусловы, результат для блока 6161 может быть чем-то вроде 0053. Это приведет к искусственному второму символу «\ 0», который развращает результирующий сообщение. Есть ли способ обойти эту проблему? Использование прокладки или что-либо подобное, к сожалению, не является опцией, поскольку мне требуется использовать ту же функцию для шифрования и дешифрования.RSA при проблемах с сообщениями ASCII с ' 0'
1
A
ответ
0
Выход RSA - это номер. Обычно это число кодируется как строка октета (или байтовый массив). Вы не должны рассматривать результат как строку символов. Вам нужно рассматривать его как байтовый массив с той же длиной, что и модуль (или, по крайней мере, длина модуля в байтах).
Помимо результата, содержащего нуль (нуль-терминатор), символы могут иметь любое значение, включая непечатаемые символы, такие как управляющие символы и 7F
. Если вы хотите обработать результат как печатную строку, конвертируйте в hex или base64.
+0
Размер модуля в битах также зависит от размера ключа. –
Это для присвоения класса? Если да, то каковы точные требования? – duskwuff
Является ли тег «ARM» ошибочным? Что вопрос имеет отношение к ARM? См .: [Заполнение RSA в Википедии] (http://en.wikipedia.org/wiki/RSA_%28cryptosystem%29#Padding). –
@ duskwuff Да, требование состоит в том, что я использую одну функцию: char * crypt (char * message, unsigned int e, unsigned int N) для расшифровки RSA и RSA-шифрование ASCII-сообщения (что возможно в rsa, если вы выберете e правильно) – Ozelotl