当我说“隐藏”时,是指让字符串在编译后的二进制文件中更难被找到。
例如,这段代码:
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';
......但这不是一个好方法。有更好的想法吗?
顺便说一句:我知道仅仅隐藏秘密并不能对抗决心坚定的攻击者,但这总比没有强……
另外,我知道非对称加密,但在这种情况下不可接受。我正在重构一个现有的应用程序,该应用程序使用Blowfish加密并将加密数据传递到服务器(服务器使用相同的密钥解密数据)。
我 无法 更改加密算法,因为我需要提供向后兼容性。 我甚至无法更改加密密钥。