我一直在寻找替代getpass()方案,实际上这是隐藏我发现的密码输入的最简单方法。对于 C++ 来说,这是一种损失,因为它是如此简单的函数却有很多用途。
我想知道的是为什么它被认为是过时的,它是否有任何安全问题?
我是否可以/应该仍然专业地使用它,无视警告并将其视为“夸大”?
为什么 getpass() 被认为是过时的函数?
根据这个手册页
getpass() 函数不是线程安全的,因为它操纵全局信号状态。
getpass() 函数计划从 X/Open CAE 规范的未来版本中删除。
我还可以/应该专业地使用它吗
如果你的C库有这个函数,那么你就可以使用它。
如果您考虑以下任何一个:缺乏线程安全性,或者一般的全局信号状态操作,或者作为一个过时的函数,它可能会在符合未来 POSIX 版本的 C 库的未来版本中被删除,出现问题,那么你不应该使用它。
推荐的替代方案是编写自己的函数,使用termios并禁用该ECHO标志。完成glibc 手册中的最小替代。