1

重複の可能性:
端末でのパスワード入力を非表示

Linux で C 言語を使用したパスワード プログラムの解決策を教えてください。

パスワードの最初の文字を入力すると、ウィンドウが表示されます

password:*-

入力した文字の代わりに。

次の文字を入力すると、ウィンドウが表示されます

password**-

最大 8 文字で、パスワードも確認します。

4

4 に答える 4

2
read -s -n 8 -p "password:" mypassword

-sパスワード入力プロンプトに
-nする 文字数を制限するプロンプトを
-p STRING設定する

$mypassword入力されたパスワードは、後で使用するために変数に保存されます。

Linux のコマンド ラインでは通常、パスワードを入力するときに代替文字が表示されないため、このコマンドには代替文字を表示するオプションがありません。それでも、それはあなたが探しているものの良い近似です.

于 2012-07-30T06:51:49.100 に答える
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);
}
于 2012-07-30T08:26:34.760 に答える