LINUX:用C語言來類比密碼輸入

來源:互聯網
上載者:User

    以前在LINUX環境下,想輸入密碼(關閉回顯)時都是用getpass函數,今天無意中看到手冊上說:This function is obsolete.  Do not use it. 
    那我就自己實現一個類似的功能吧(功能相同,原理不同)

程式的思路很簡單:關閉回顯,讀取輸入,恢複設定。

上代碼:

#include <stdio.h>#include <stdlib.h>#include <termios.h>#include <string.h>#define MAXLEN 256//參數dest是目標字串, maxlen是最大長度,//如果輸入超過了最大長度,則密碼將會被截斷//成功返回0,否則返回-1int new_getpass(char *dest, int maxlen){struct termios oldflags, newflags;int len;//設定終端為不回顯模式 tcgetattr(fileno(stdin), &oldflags);newflags = oldflags;newflags.c_lflag &= ~ECHO;newflags.c_lflag |= ECHONL;if (tcsetattr(fileno(stdin), TCSANOW, &newflags) != 0){perror("tcsetattr");return -1;}//擷取來自鍵盤的輸入fgets(dest, maxlen, stdin);len = strlen(dest);if( len > maxlen-1 )len = maxlen - 1;dest[len-1] = 0;//恢複原來的終端設定if (tcsetattr(fileno(stdin), TCSANOW, &oldflags) != 0){perror("tcsetattr");return -1;}return 0;}int main(){char password[MAXLEN];printf("Enter password: ");new_getpass(password, MAXLEN);printf("You password is: %s\n", password);return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.