【问题标题】:Invisible input for passwords? [duplicate]密码的隐形输入? [复制]
【发布时间】:2010-08-30 22:21:43
【问题描述】:

可能重复:
Read a password from std::cin

我想 cin>>input 但是当他们输入一些东西时,我不希望它对他们可见。就像您在 unix 中使用 passwd 更改密码时,它不会显示您输入的内容。我希望很清楚我在问什么。提前谢谢你。

【问题讨论】:

标签: c++ passwords stdout stdin


【解决方案1】:

来自C++ FAQ Lite

这不是标准的 C++ 功能——C++ 甚至不需要您的系统有键盘或屏幕。这意味着每个操作系统和供应商的做法都会有所不同。 请阅读您的编译器附带的文档以了解您的特定安装的详细信息。

【讨论】:

  • RTFM 是最好的答案?真的吗?
【解决方案2】:

cin 不是这样做的方法,因为操作系统(通常)会回显标准输入。您需要做的是在操作系统级别处理关键事件。

【讨论】:

    【解决方案3】:

    getpass(3) 用于类 Unix 系统,它会做你想做的事。

    然而,

    1. 它不可移植(仅限 Unix 系统)。
    2. 已弃用(“存在于 SUSv2 中,但标记为 LEGACY。在 POSIX.1-2001 中已删除。”)。

    标准 C 或 C++ 无法做到这一点。

    【讨论】:

      【解决方案4】:

      如果你想要的就像你输入密码登录到一个 linux 机器时所做的那样,那么这种行为在 C 或 C++ 中是无法实现的。您将不得不使用特定于平台的库来执行此操作。更具体地说,C 和 C++ 中的控制台输入总是回显到控制台。

      【讨论】:

        【解决方案5】:

        让它检测按键。可以这样想:当用户在视频游戏中按下“A”键时,程序运行代码;不要将其视为接收输入。将其视为检测击键并将每个击键添加到某些数据结构(例如数组)。

        我熟悉您所说的 UNIX 终端中的功能,它不允许您退格或其他任何东西。如果你想要那个功能,就按照我上面说的去做。

        如果您希望能够退格,尽管用户将无法看到他们退格的内容,但您可以编写代码,在用户单击退格时删除数组的最后一个元素。

        此外,当其他人说您需要针对您正在运行它的系统进行编程时,他们是正确的。

        最后,如果您将其用作密码并将其放入数组中,这可能不安全。

        【讨论】:

          猜你喜欢
          • 2021-07-03
          • 2021-11-08
          • 1970-01-01
          • 2013-08-19
          • 2011-12-06
          • 1970-01-01
          • 2012-06-14
          • 2012-03-01
          相关资源
          最近更新 更多