在编译的 C 或 C++ 代码中加密密码

Dan*_*iel 5 c c++ compiler-construction macos decompiler

我知道如何在终端中使用 GCC 和 CC 编译 C 和 C++ 源文件,但是我想知道在编译后在这些文件中包含密码是否安全。

例如.. 我检查用户输入的某个密码,例如 123,但看起来编译的 C/C++ 程序可能被反编译。

无论如何编译C / C ++源文件,同时保持源完全隐藏..如果没有,任何人都可以提供一个加密输入的小例子,然后检查密码例如:(SHA1,MD5)

Lie*_*yan 5

不,您不能在源文件中安全地包含密码。可执行文件中的字符串是纯文本格式,任何使用文本编辑器的人都可以轻松查看您的密码。

一个不太安全但会践踏某些人的方法是存储加密的字符串。所以,基本上:

enc = "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4"

bool check() {
    pass = getPassFromUser();
    encpass = myHashingFunction(pass);
    return pass == encpass;
}
Run Code Online (Sandbox Code Playgroud)

这会阻止某些人,但并不是真正更安全,对于汇编黑客来说,将可执行文件中的“enc”字符串替换为另一个具有已知明文值的 sha256 编码字符串是相对微不足道的。

即使您使用单独的身份验证服务器,设置一个虚假的身份验证服务器并欺骗您的程序连接到这个虚假的身份验证服务器并不困难。

  • ...或者只是总是返回 `true` (7认同)

INS*_*INS 3

不建议在代码中保留任何敏感的静态数据。您可以为此使用配置文件。在那里你可以存放任何你喜欢的东西。

但如果您确实想这样做,请首先记住,通过使用调试器进行调查并修改它可以轻松更改代码。只有用户无权访问的程序才被认为更安全(例如网站)。

大多数(不同站点的)登录密码不是以明文形式存储在数据库中,而是使用 MD5、SHA1、Blowfish 等算法进行加密。

我建议您使用OpenSSL库中的这些算法之一。

我要做的是使用一些公钥加密算法。这可能需要更长的时间才能破解,因为在我看来,在谈论软件保护时没有什么是 100% 确定的。