Как скрыть строку в двоичном коде?

Иногда полезно скрыть строку из двоичного (исполняемого) файла. Например, имеет смысл скрывать ключи шифрования от двоичных файлов.

Когда я сказал "скрывать"Я имею в виду усложнение поиска строк в скомпилированном бинарном файле.

Например, этот код:

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 и передает зашифрованные данные на сервер (сервер расшифровывает данные с помощью того же ключа) .I

не может изменить алгоритм шифрования, потому что мне нужно обеспечить обратную совместимость. яне может даже изменить ключ шифрования.

Ответы на вопрос(20)

Ваш ответ на вопрос