Linux C:如何隐藏密码输入的星号? (linux c 密码 星号)

在开发 Linux 应用程序时,常常需要读取用户输入的密码。通常情况下,我们往往会使用 Linux 系统提供的 getch() 函数来读取用户输入的字符,但是这种方式在输入密码时会暴露用户的密码,不仅不安全,并且用户的输入也不够隐私。为了保障用户的密码安全,本文将介绍如何隐藏密码输入的星号。

1. 读取密码的函数

在 Linux C 开发中,我们通常会使用 GCC 来编写代码,在读取密码的过程中,我们可以使用 termios.h 头文件中的属性,而在 Ubuntu 14.04 安装包中,它已经默认集成,因此我们可以直接使用该头文件中的函数实现密码的读取,代码如下:

“`

#include

#include

#include

#include

int getch(void)

{

struct termios tm, tm_old;

int fd = STDIN_FILENO, c;

if (tcgetattr(fd, &tm)

return -1;

}

tm_old = tm;

cfmakeraw(&tm);

if (tcsetattr(fd, TCSANOW, &tm)

return -1;

}

c = getchar();

if (tcsetattr(fd, TCSANOW, &tm_old)

return -1;

}

return c;

}

void getpassword(char *password,int size)

{

int i = 0, ch;

while ((ch = getch()) != ‘\n’)

{

if(ch != ‘\t’ && ch != ‘\b’ && i

{

putchar(‘*’);

*(password + i++) = ch;

}

else if(ch == ‘\b’ && i > 0)

{

putchar(‘\b’);

putchar(‘ ‘);

putchar(‘\b’);

i–;

}

}

*(password + i) = ‘\0’;

}

“`

在代码中,getch() 函数是读取字符的函数,其中使用了 Linux 的 terminals 模块来获得输入字符,这个结构体包含了一系列的常量,如带宽速率、奇偶检验、流控制和硬件控制。通过设备文件文件描述符 fd(设置为 STDIN)来获取终端的属性,然后把该函数阻塞并打开,使用 cfmakeraw(&tm) 设置它为非规范模式,使得输入输出数据直接发送和接收,就像开发实时应用程序一样。最后返回读取到的字符。

getpassword() 函数通过 getche() 函数来避免了明文输入密码的情况,并在每一次输入完一个字符之后输出一个星号,从而避免了明文显示密码的情况。

2. 调用函数实现密码输入

在我们完成上述的代码之后,我们可以使用它来进行密码的输入,然后将其发送到服务器。代码如下:

“`

int mn()

{

char password[10];

printf(“Please enter password: “);

getpassword(password,10);

printf(“\nYour password is %s “, password);

return 0;

}

“`

在代码中,我们可以看到,首先像命令行提示用户输入密码,然后通过调用 getpassword() 函数来读取和隐藏密码,并最后输出结果。

3.


数据运维技术 » Linux C:如何隐藏密码输入的星号? (linux c 密码 星号)