Иногда полезно скрыть строку из двоичного (исполняемого) файла. Например, имеет смысл скрывать ключи шифрования от двоичных файлов.
Когда я говорю "скрыть", я имею в виду, что сложнее найти строки в скомпилированном двоичном файле.
Например, этот код:
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 и передает зашифрованные данные на сервер (сервер расшифровывает данные одним и тем же ключом).
Я не могу изменить алгоритм шифрования, потому что мне нужно обеспечить обратную совместимость. я не может даже изменить ключ шифрования.