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