getpass() 原型如下:
[C++] 纯文本查看 复制代码 #include <unistd.h>
char *getpass( const char *prompt);
该函数会先显示出 prompt 的要求输入密码提示语,然后从 /dev/tty 中读取输入的密码,如果无法从 /dev/tty 中读取,那么转而从标准输入中读取。对于 glibc2 来说,并不会限制你输入密码的长度。所输入的密码以 NULL 结尾,换行符 '\n' 会被忽略。在输入密码时,getpass() 会关闭字符回显,并忽略一些如 Ctrl + c 或 Ctrl + z 所产生的信号。
该函数一般来说已经不建议使用,如果使用,那么应该在读取密码后使用一些加密函数,如 crypt() 来进行加密。由于输入的密码明文是会留在进程的地址空间的,所以加密完密码后,应该尽快清理掉密码这些空间。
测试代码:
[C++] 纯文本查看 复制代码 #include <stdio.h>
#include <unistd.h>
#include <string.h>
int main()
{
char passwd[] = "groad.net";
char *ptr;
ptr = getpass("Input your password: ");
if (!strcmp(passwd, ptr))
printf ("password OK!\n");
else
printf ("password wrong!\n");
int length = strlen(ptr);
memset (ptr, 0, length); //清除密码
memset (passwd, 0, sizeof(passwd)); //清除密码
return 0;
}
运行输出: ./getpass
Input your password:
password OK! |