gpt4 book ai didi

c++ - 如何在终端上以星号(*)的形式显示输入密码

转载 作者:行者123 更新时间:2023-11-30 17:11:34 25 4
gpt4 key购买 nike

我想编写一个简单的C程序来验证密码,例如密码是否等于1234 然后我想打印欢迎,否则再试一次。但问题如下:

我想以 *(星号)的形式显示输入的密码。例如..如果用户输入1234,它将显示为****以避免其他人看到输入的密码。

任何人都可以告诉我如何使用 C 或 C++ 实现它。平台:UNIX

最佳答案

不幸的是,这个问题的解决方案是特定于平台的。

在 Linux 或 BSD 上,您可以使用 readpassphrase函数(还有 getpass ,尽管它不允许调用者提供缓冲区和缓冲区大小。 GNU Lib C (链接损坏?尝试 this alternative 相反)库的文档也提供了一个很好的指南关于如何根据较低级别的 termios 原语自行实现这一点,您可以在其他 UNIX 实现上使用它来代替 getpass)。

在 Windows 上,您可以使用 SetConsoleMode禁用默认的回显行为(从而回显您自己的字符,例如星号)。然后您可以使用 SetConsoleMode 恢复回显。

然而,我应该补充一点,这是一种非常糟糕的身份验证形式,因为它涉及更多密码,这是每个用户存在的祸根(而且也不是特别安全)。更好的方法是在应用程序中启动 Web 服务器并输出用户应在其上进行身份验证的 URL。这种方法的优点是,当用户导航到此 URL 时,该 URL 可以支持第三方身份提供商(例如 Google、Facebook、Twitter 等)的委派登录。即使您不支持第三方身份提供商,这种方法还有其他好处;如果您有其他基于 Web 的工具,此方法可以减少用户必须进行身份验证的次数(因为命令行工具和基于 Web 的工具将共享相同的浏览器 session ),并且允许您仅实现一次登录流程,此方法还可以减轻网络钓鱼风险(与在命令行上输入凭据相比,用户输入凭据时可以在浏览器中清楚地看到主机,在命令行上输入凭据更容易欺骗提示,并且如果您仅在最后一步重定向到本地主机,但执行以下操作这种方法还允许对远程主机上的大部分逻辑进行独立于客户端命令行应用程序部署的授权流程更新,这具有重要的安全优势。话虽如此,基于 Web 的登录并不总是正确的方法。还值得研究替代身份验证机制,例如 libpam(在 libpam 下,您可以使用函数 pam_authenticate 来对用户进行身份验证,而不是直接将密码作为输入)。值得投入一些研究来确定适合您的特定用例的最佳机制。

关于c++ - 如何在终端上以星号(*)的形式显示输入密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32098031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com