Unix 不回顯輸入密碼

2021-05-23 23:21:20 字數 2340 閱讀 1021

原帖見: http://blog.163.com/xiaolei-li/blog/static/114404451200911172155783/

在軟體開發中,往往會遇到要求使用者輸入密碼的情況。出於對密碼的保密,輸入的字元是不會顯示到螢幕上的。例如,在登入linux系統時,輸入使用者名稱後,輸入的密碼是不顯示的。這裡介紹兩種方法來解決這一問題。

curses庫是由柏克萊大學的bill joy及ken arnold所開發的。當時開發curses庫的目的是為了解決程式對於不同終端的相容性。curses庫用於處理linux/unix上的游標移動及螢幕顯示問題。考慮到curses庫的複雜性,這裡只是簡單地介紹一下curses庫的使用。需要這方面詳細資訊可以查閱相關資料。

使用curses庫中的函式前,需要進行必要的初始化工作。程式需要使用initscr函式來開啟curses模式,在結束前呼叫endwin函式來關閉curses模式。**如下:

#include

int main(int argc,char* argv)while(c != '/n' && n < (size - 1));

passwd[n] = '/0';

return n;

int main()

char passwd[20];

int n;

init();

n=getpasswd(passwd, sizeof(passwd));

printw("/nyour passwd is:%s/n", passwd);

printw("press any key continue .../n");

refresh();

getchar();

endwin();

return 0;

使用gcc編譯該程式,獲得名為p6.5的可執行程式。注意程式中使用了curses庫,因此編譯時要指明該庫的名稱。具體編譯和執**況如下:

[program@localhost charter6]$ gcc -o p6.3 p6.3.c -lcurses

[program@localhost charter6]$ ./p6.3

please input password:*******

your passwd is:afdafds

press any key continue ...

還有種方法,可以不使用curses庫解決密碼輸入的回顯問題。程式p6.4.c通過使用tcgetattr函式和tcsetattr函式同樣達到了目的。具體**如下:

#include

#include

#include

#include

#define echoflags (echo | echoe | echok | echonl)

//函式set_disp_mode用於控制是否開啟輸入回顯功能

//如果option為0,則關閉回顯,為1則開啟回顯

int set_disp_mode(int fd,int option)

int err;

struct termios term;

if(tcgetattr(fd,&term)==-1)while(c != '/n' && c !='/r' && n < (size - 1));

passwd[n] = '/0';

return n;

int main()

char passwd[20];

//首先關閉輸出回顯,這樣輸入密碼時就不會顯示輸入的字元資訊

set_disp_mode(stdin_fileno,0);

//呼叫getpasswd函式獲得使用者輸入的密碼

getpasswd(passwd, sizeof(passwd));

printf("/nyour passwd is:%s/n", passwd);

printf("press any key continue .../n");

set_disp_mode(stdin_fileno,1);

getchar();

return 0;

使用gcc編譯p6.4.c**,獲得名為p6.4的可執行程式。執行該程式,得到如下的輸出結果:

[program@localhost charter6]$ gcc -o p6.4 p6.4.c

[program@localhost charter6]$ ./p6.4

please input password:

your passwd is:afdfasf

press any key continue ...

[program@localhost charter6]$

C 輸入密碼(字元)不回顯

1.中有乙個 getch 函式,當使用它的時候不會回顯字元。2.如下,r 表示回車符 b 表示退格符,當按下 backspace 時就是輸入了 b 退格的意思是游標往前一格,而原來位置顯示的字元不變,所以判斷若輸入非退格符則顯示 並且將ch讀入到password中 若為退格符,則需先顯示 b 使得游...

密碼不回顯函式(二)

值得注意的是前面兩個函式都是從鍵盤讀入資料!還有getchar是很值得研究的 getchar 是stdio.h中的庫函式,它的作用是從stdin流中讀入乙個字元,也就是說,如果stdin有資料的話不用輸入它就可以直接讀取了。而getch 和getche 是conio.h中的庫函式,它的作用是從鍵盤接...

getpass 函式 螢幕輸入不回顯

環境 vmware workstation centos 6.4 x86 64 說明 讀寫使用者輸入,螢幕不回顯 char getpass const char prompt getpass用於從鍵盤讀取使用者輸入,但螢幕不回顯。引數prompt為螢幕提示字元。函式返回值為使用者鍵盤輸入的字串。螢幕...