c++ - 字符串值有多安全?
问题描述
采取以下程序:
#include <string>
#include <iostream>
constexpr std::string correct_pin = "1874";
std::string response;
int main() {
std::cout << "Enter a pin.";
std::cin >> response;
if (response == correct_pin) {
std::cout << "That is the correct pin!";
}
else {
std::cout << "Incorrect pin.";
}
}
用户是否能够以某种方式深入记忆并找到文字"1874"
,并推断它必须是引脚?如果是这样,有什么方法可以使字符串更安全?
解决方案
用户能否以某种方式深入记忆并找到文字“1874”
是的。容易地。
以及它必须是别针的原因?
一般情况下并不那么容易,但可能。如果包含调试信息,那么它仍然很容易。或者他们可以假设其中一个字符串是 PIN 并且只是所有字符串,直到他们找到匹配项。
如果您只看一下可执行文件的内容,您可能会发现如下内容:
Enter a pin.1874That is the correct pin!Incorrect pin.;
你会猜到什么?
如果是这样,有什么方法可以使字符串更安全?
有一些方法可以混淆,但如果你想让程序保持独立,就没有办法保证安全。一种可能的解决方案是让程序连接到包含秘密的服务器,并应用零知识证明技术来使用秘密。
推荐阅读
- node.js - 将节点脚本应用于节点项目生成的日志
- sql - SQL Server 如何更改我的视图,使其在插入表时不会产生重复?
- .net - 强制子类必须在 .net 中可序列化
- nsis - 如何使用 NSIS 处理我的“TestSetup.nsi”文件中“Welcome.nsh”文件的“取消”事件
- c - 预期标识符 caesar.c 1 错误括号
- sql - 如何使来自两个不同表的两个非常相似的列显示在主表的相同主键下
- java - 使用单例 MainActivity?
- python-2.7 - 端点调用者没有权限
- android - 在构建 apk 后对未显示的本机图像做出反应
- reactjs - React.js 在映射表单上设置状态