c++ - 如果我不想让别人知道或更改硬编码值,宏是否比静态常量更安全?

标签 c++ c security

我搜索了一些关于

的主题
#define PASSWORD "abcde"

static const char* PASSWORD="abcde";

似乎#define没有将值存储在内存中(我不确定它是否正确)。我听说它可能有一些工具可以检测和访问应用程序执行期间正在使用的内存地址(例如:更改游戏的某些值)。我担心,如果我使用static const char* PASSWORD,有人可能会通过检测PASSWORD的地址知道PASSWORD的值,并通过获取地址中的内容来获取PASSWORD的值。

如果我希望硬编码值更安全,使用#define是否更好?

最佳答案

在这种情况下并不重要。由于两者都使用字符串文字,因此字符串本身将存储在字符串池中,而不是动态存在于堆上的某个位置。此外,宏技术上甚至不存在,因为编译器只是用#define 定义替换了宏的所有实例。在运行时,程序不会看到任何差异。

编辑: 正如有人提到的,如果您想扰乱安全性,请查看 hashing 。这将使使用内存搜索程序提取密码变得更加困难。

关于c++ - 如果我不想让别人知道或更改硬编码值,宏是否比静态常量更安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30721902/

相关文章:

c - 使用 GTK 显示卡片堆需要帮助!

使用iconv在C中将Unicode代码点转换为UTF-8

google-chrome - 在Chrome中避免在HTTP上使用NavigatorUserMediaError "Only secure origins are allowed"

security - 中间人攻击带来的威胁

c++ - 按位非操作如何给出负值

c++ - 初始化匿名 union 的语法

c++ - boost::asio::streambuf 与 wchar_t

c++ - 为什么初始化对象的两种不同方式给出不同的输出

c - Realloc 操作超出其范围的数据

java - 如何存储需要真实值的密码?