当前位置: 首页 > 面试题库 >

隐藏终端上的密码输入

华和悦
2023-03-14
问题内容

我想在使用写入密码时屏蔽我的密码*。我将Linux GCC用于此代码。我知道一种解决方案是使用这样的getch()功能

#include <conio.h>   
int main()
{
    char c,password[10];
    int i;
    while( (c=getch())!= '\n');{
        password[i] = c;
        printf("*");
        i++;
    }
    return 1;
}

但是问题是这样GCC不包括conio.h文件getch()对我没用。有没有人有办法解决吗?


问题答案:

在Linux世界中,屏蔽通常不是用星号完成的,通常回显只是关闭,并且终端显示空白,例如,如果您使用su或登录虚拟终端等。

有一个用于获取密码的库函数,它不会用星号掩盖密码,但会禁止将密码回显到终端。我从一本Linux书中删除了这本书。我相信它是posix标准的一部分

#include <unistd.h>
char *getpass(const char *prompt);

/*Returns pointer to statically allocated input password string
on success, or NULL on error*/

getpass()函数首先禁用回显和终端特殊字符(例如中断字符,通常为Control-C)的所有处理。

然后,它打印提示所指向的字符串,并读取输入行,并返回以空终止的输入字符串,并删除尾随的换行符作为其函数结果。

谷歌搜索getpass()引用了GNU实现(应该在大多数linux发行版中)以及一些示例代码,用于在需要时实现自己的代码

http://www.gnu.org/s/hello/manual/libc/getpass.html

他们自己滚动的示例:

#include <termios.h>
#include <stdio.h>

ssize_t
my_getpass (char **lineptr, size_t *n, FILE *stream)
{
    struct termios old, new;
    int nread;

    /* Turn echoing off and fail if we can't. */
    if (tcgetattr (fileno (stream), &old) != 0)
        return -1;
    new = old;
    new.c_lflag &= ~ECHO;
    if (tcsetattr (fileno (stream), TCSAFLUSH, &new) != 0)
        return -1;

    /* Read the password. */
    nread = getline (lineptr, n, stream);

    /* Restore terminal. */
    (void) tcsetattr (fileno (stream), TCSAFLUSH, &old);

    return nread;
}

如果需要,您可以以此为基础进行修改以显示星号。



 类似资料:
  • 问题内容: 我有如下的bash脚本: 我希望当用户在终端上键入密码时,不应显示该密码(或应显示诸如*之类的内容)。我该如何实现? 问题答案: 只需向您的读取调用提供-s,如下所示:

  • 问题内容: 我有一个类,要求输入用户名和密码来使应用程序中的用户生效。 在其中,我有2个 JTextField 对象,一个用于用户名输入,另一个用于密码输入。 它工作正常,但是我的问题是,当用户在pswdTextField中写入密码时,密码显示在其中。我想通过为组成插入密码的每个字母显示一个点,星号或类似字符来隐藏它。 怎么做? 问题答案: 而不是使用JTextField,请为您的pswdText

  • 我需要在源代码中隐藏密码,有什么可能的方法来混淆密码,以降低反编译的风险? 例如

  • 输入一个语句后按回车键,MATLAB自动在屏幕上显示结果,但如果该行命令是以";"结尾,则MATLAB仍会进行运算赋值,但不显示任何输出结果.这一点在生成复杂矩阵时特别有用.例如: A = magic(100);

  • 问题内容: 我在文件系统上有两个脚本,第二个是jenkins作业。第二个脚本调用第一个并传递参数。参数包含密码参数。如何将密码隐藏到日志中?我试图通过使用exec命令隐藏输出,但是问题没有解决。 问题答案: 该面具密码插件做到了这一点。

  • 本文向大家介绍Android实现动态显示或隐藏密码输入框的内容,包括了Android实现动态显示或隐藏密码输入框的内容的使用技巧和注意事项,需要的朋友参考一下 本文实例展示了Android实现动态显示或隐藏密码输入框内容的方法,分享给大家供大家参考之用。具体方法如下: 该功能可通过设置EditText的setTransformationMethod()方法来实现隐藏密码或者显示密码。 示例代码如下