首页 > 解决方案 > 字符串值有多安全?

问题描述

采取以下程序:

#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",并推断它必须是引脚?如果是这样,有什么方法可以使字符串更安全?

标签: c++

解决方案


用户能否以某种方式深入记忆并找到文字“1874”

是的。容易地。

以及它必须是别针的原因?

一般情况下并不那么容易,但可能。如果包含调试信息,那么它仍然很容易。或者他们可以假设其中一个字符串是 PIN 并且只是所有字符串,直到他们找到匹配项。

如果您只看一下可执行文件的内容,您可能会发现如下内容:

Enter a pin.1874That is the correct pin!Incorrect pin.;

你会猜到什么?

如果是这样,有什么方法可以使字符串更安全?

有一些方法可以混淆,但如果你想让程序保持独立,就没有办法保证安全。一种可能的解决方案是让程序连接到包含秘密的服务器,并应用零知识证明技术来使用秘密。


推荐阅读