Вопрос
Моя программа на C++ использует стандартную рыбу-фугу.
Моя программа на C# использует алгоритм шифрования Blowfish из здесь.
Оба приложения (TCP-клиенты) делают одно и то же:получить пакет, зашифровать его и затем отправить обратно.Если сервер распознает пакет как обычный — он отправляет другой пакет, иначе закрывает сокет.Я выполнил все функции C++ и C#, и все осталось таким же, кроме шифрования.
В файле C++ у меня только одно шифрование.Однако в C# Blowfish у меня есть
- ИглобрюхаяCBC
- ИглобрюхаяCFB
- БлофишECB
- ИглобрюхаяПростой
Я не знал, какой из них используется в моем проекте на C++, поэтому я случайно выбрал BlowfishECB
.Но это не работает, сервер (у меня нет к нему доступа) не распознает пакет как зашифрованный.
Мой вопрос:Существует ли стандартный Blowfish для C# или, если он единственный, как мне решить эту проблему?РЕДАКТИРОВАТЬ:
Код иглобрюхой C++ можно увидеть здесь.
Решение
Нет, стандартного Blowfish для C# не существует.Он будет использовать то, что вы ему скажете.(Редактировать:Думаю, я неправильно понял.Если вам нужен Blowfish, соответствующий стандартам, для C#, я бы порекомендовал Bouncy Castle Crypto.Это порт Java, содержащий большинство документированных стандартов RFC.Взгляните на модульные тесты, чтобы увидеть примеры использования классов.Когда бы я ни использовал его в последний раз, документации отсутствовало, но модульные тесты являются довольно хорошими примерами того, как все сочетается.)
Вопрос, который вы хотите задать, заключается в том, какой вариант Blowfish использует ваше приложение на C++.Какую библиотеку вы используете в приложении C++ для шифрования?Зная это, вы сможете сделать правильный выбор в своем приложении C#.
Лично я чаще всего сталкиваюсь с CBC.«Простой», вероятно, стоит попробовать.
Вам также придется иметь дело с такими вещами, как обеспечение совпадения вектора инициализации в зависимости от того, какой из них вы используете.