请使用C语言为Linux提供密码程序解决方案。
当我们输入密码的第一个字母时,窗口应显示
password:*-
而不是输入的字母。
当我们输入下一个字符时,窗口应显示
password**-
最多8个字符 并验证密码。
感谢。
答案 0 :(得分:2)
read -s -n 8 -p "password:" mypassword
-s
使其成为密码输入提示
-n
限制字符数
-p STRING
设置提示
输入的密码保存在$mypassword
变量中以供进一步使用。
在linux命令行中通常在输入密码时不显示替代字符,因此该命令不提供执行此操作的选项。不过,它与你正在寻找的东西很接近。
答案 1 :(得分:2)
答案 2 :(得分:2)
使用C功能:
/* no test */
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
static void
changeMode(bool b)
{
static struct termios cooked;
static int raw_actived = 0;
if (raw_actived == b) return;
if (b) {
struct termios raw;
tcgetattr(STDIN_FILENO, &cooked);
raw = cooked;
cfmakeraw(&raw);
tcsetattr(STDIN_FILENO, TCSANOW, &raw);
} else {
tcsetattr(STDIN_FILENO, TCSANOW, &cooked);
}
raw_actif = b;
}
static void
clean(void)
{
int c;
do
c = getchar();
while (c != '\n' && c != EOF);
}
void
askPassword(char *s, size_t n)
{
changeMode(1);
for (size_t i = 0; i < n; ++i) {
s[i] = getchar();
clean();
putchar('*');
}
changeMode(0);
}
答案 3 :(得分:1)
这只是一个想法,所以你可以尝试与否。
在开始时,您必须将终端转为非回声模式。这样,用户的输入就不会显示出来。 (Termios设置)
从变量计数器开始。你创建一个循环(while),在其中,你使用read函数或getchar来获取每一个输入。 接下来,检查输入是否正确。在终端上写'*'或什么都没有。