使用c语言的ubuntu中的密码程序

时间:2012-07-30 06:42:48

标签: c linux passwords

  

可能重复:
  Hide password input on terminal

请使用C语言为Linux提供密码程序解决方案。

当我们输入密码的第一个字母时,窗口应显示

password:*-

而不是输入的字母。

当我们输入下一个字符时,窗口应显示

password**-

最多8个字符 并验证密码。

感谢。

4 个答案:

答案 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来获取每一个输入。 接下来,检查输入是否正确。在终端上写'*'或什么都没有。