Иногда полезно скрыть строку из двоичного (исполняемого) файла.
Например, имеет смысл скрыть ключи шифрования от двоичных файлов.
Когда я говорю «скрыть», я имею в виду усложнение поиска строк в скомпилированном двоичном файле.
Например, этот код:
const char* encryptionKey = "My strong encryption key";
// Using the key
после компиляции создает исполняемый файл со следующим в его разделе данных:
4D 79 20 73 74 72 6F 6E-67 20 65 6E 63 72 79 70 |My strong encryp|
74 69 6F 6E 20 6B 65 79 |tion key |
Вы видите, что наша секретная строка может быть легко найдена и / или изменена.
Я мог бы спрятать строку ...
char encryptionKey[30];
int n = 0;
encryptionKey[n++] = 'M';
encryptionKey[n++] = 'y';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 's';
encryptionKey[n++] = 't';
encryptionKey[n++] = 'r';
encryptionKey[n++] = 'o';
encryptionKey[n++] = 'n';
encryptionKey[n++] = 'g';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 'e';
encryptionKey[n++] = 'n';
encryptionKey[n++] = 'c';
encryptionKey[n++] = 'r';
encryptionKey[n++] = 'y';
encryptionKey[n++] = 'p';
encryptionKey[n++] = 't';
encryptionKey[n++] = 'i';
encryptionKey[n++] = 'o';
encryptionKey[n++] = 'n';
encryptionKey[n++] = ' ';
encryptionKey[n++] = 'k';
encryptionKey[n++] = 'e';
encryptionKey[n++] = 'y';
… но это не очень хороший метод. Есть идеи получше?
PS: я знаю, что простое сокрытие секретов не работает против решительного злоумышленника, но это намного лучше, чем ничего ...
Кроме того, я знаю об ассиметричном шифровании, но в данном случае это неприемлемо. Я выполняю рефакторинг существующего приложения, которое использует шифрование Blowfish и передает зашифрованные данные на сервер (сервер расшифровывает данные с помощью того же ключа).
Я не могу изменить алгоритм шифрования, потому что мне нужно обеспечить обратную совместимость. Я не могу даже изменить ключ шифрования.