密码的隐形输入?

时间:2010-08-30 22:21:44

标签: c++ passwords stdout stdin

  

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

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

5 个答案:

答案 0 :(得分:6)

来自C++ FAQ Lite

这不是标准的C ++特性--C ++甚至不需要你的系统有键盘或屏幕。这意味着每个操作系统和供应商都会有所不同。 有关特定安装的详细信息,请阅读编译器随附的文档。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

对于类Unix系统有getpass(3),它可以做你想要的。

然而,

  1. 它不可移植(仅限Unix系统)。
  2. 它已被弃用(“存在于SUSv2中,但标记为LEGACY。已在POSIX.1-2001中删除。”)。
  3. 使用标准C或C ++无法做到这一点。

答案 3 :(得分:1)

如果你想要的是你输入密码登录linux盒子时所做的事情,那么在C或C ++中无法实现这种行为。您必须使用特定于平台的库来执行此操作。更具体地说,C和C ++中的控制台输入始终会回显到控制台。

答案 4 :(得分:0)

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

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

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

此外,当其他人说你需要对你正在运行它的系统进行特定编程时,其他人都是正确的。

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