有时,从二进制(可执行)文件中隐藏字符串很有用。例如,从二进制文件隐藏加密密钥很有意义。
当我说“隐藏”时,我的意思是使字符串很难在已编译的二进制文件中找到。
例如,此代码:
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加密并将加密数据传递到服务器的现有应用程序(服务器使用相同的密钥解密数据)。
我无法更改加密算法,因为我需要提供向后兼容性。我什至不能更改加密密钥。