Переключение Endian зашифрованного массива символов - PullRequest
4 голосов
/ 16 марта 2011

Я работаю над проектом в школе, где мы создали простой центр распространения ключей в нашей сети, зашифрованный с помощью blowfish.Я успешно закодировал его, и он работает на машинах с тем же порядком байтов.Проблема возникает, когда я должен отправить его на машину с другим порядком байтов.Ключ шифруется как массив символов, а также отправляется и принимается по сети.Когда зашифрованный ключ печатается на любом конце, он отображает ту же зашифрованную строку, но дешифрование не удается.Я попытался изменить порядок массива и расшифровки, но результаты совпадают.

Мои вопросы:

  1. Является ли мое обращение к массиву символов правильным способом решения проблем с порядком байтов в этой ситуации?1010 * Может ли быть проблема в том, что он был зашифрован на машине с одним порядком байтов и там не может быть расшифрован с помощью того же алгоритма на машине с прямым порядком байтов?(вот версия blowfish, которую я использовал: http://www.codeproject.com/KB/security/blowfish.aspx)

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Зависит от реализации алгоритма.Рассматривая реализацию , которую вы используете (посмотрите на функции BytesToBlock и BlockToBytes), она приводит блоки байтов к целым числам без знака.

Это преобразование зависит от порядкового номера, и поэтому алгоритм должен быть скорректирован в зависимости от порядкового номера машины, на которой он запущен.

0 голосов
/ 17 марта 2011

Возможно, что байты меняются местами, но это обычно происходит только с числами (см. https://beej.us/guide/bgnet/html/multi/htonsman.html). Скорее всего, это биты с каждым символом. Вам просто нужен простой алгоритм для их переключения перед расшифровкой. Конечно, если биты и байты поменялись местами, это будет еще интереснее.

Теперь, тот факт, что он отображает ту же строку, заставляет меня поверить, что проблема на самом деле не в массиве символов - это что-то в самом алгоритме дешифрования, которое зависит от порядка байтов. В этом случае вам обязательно нужно взглянуть на приведенную выше ссылку и подумать об операциях, которые вы выполняете над многобайтовыми типами. (64-битные порядковые переключатели обычно должны быть написаны вручную, но замена байтов не является сложным алгоритмом для записи.)

0 голосов
/ 16 марта 2011

Порядковый номер применяется к меньшим элементам в ваших данных.Если другая машина с прямым порядком байтов не может прочитать ваш массив char, то это, возможно, означает, что он ожидает байты в том же порядке, но с битами, обращенными в обратную сторону.1004 * элементов.Ваш порядок массивов должен оставаться неизменным.

...