Вы, ребята, можете сказать мне, если другой конец знает, какой алгоритм я использую, неужели они не могут извлечь ключ и расшифровать его?
Нет. Весь смысл стандартизированных алгоритмов шифрования (в отличие от тех, которые полагаются на неизвестность) заключается в том, что даже если все знают все его детали, его невозможно расшифровать, если у него нет ключа.
Этот подход работает, потому что единственный способ взломать шифрование - это попробовать все возможные ключи, которых слишком много. По мере увеличения вычислительной мощности ранее «безопасные» алгоритмы становятся «небезопасными». В некоторых алгоритмах также могут быть недостатки, которые допускают другие формы удержаний, которые значительно сокращают возможное пространство ключей и, следовательно, ускоряют эти атаки методом "грубой силы". Но (насколько нам известно) Blowfish здесь в безопасности.
Конечно, важно держать в секрете ключ. Если ваша программа также содержит ключ (в отличие от запроса его у пользователя или какого-либо устройства или использования случайных ключей сеанса, которые сами зашифрованы с использованием криптографии с открытым ключом), то, вероятно, обратный инженер найдет его и нарушит вашу схему.
Важной частью сохранения ключа в секрете является сохранение его "не догадывающимся" и не повторное использование его для других целей. Случайно сгенерированные ключи являются лучшими.
Кроме того, под "другим концом" вы имеете в виду злоумышленника, верно? Обычно «другой конец» относится к Бобу, Предполагаемому Получателю, и он, конечно, должен иметь возможность расшифровать сообщение.