getpass函数的调用
下面的代码调用getpass并且打印我们所输入的,以便我们可以验证ERASE和KILL字符是可以工作的(因为它们需要在canonical模式)。
#include "apue.h"
char *getpass(const char *);
int main(void)
{
char *ptr;
if ((ptr = getpass("Enter password:")) == NULL)
err_sys("getpass error");
printf("password: %s\n", ptr);
/* now use password (probably encrypt it) ... */
while (*ptr != 0)
*ptr++ = 0; /* zero it out when we're done with it */
exit(0);
}
当一个调用getpass的应用程序使用明文密码的时候,应用程序应该在内存中将它尽早清除以杜绝安全隐患。如果应用程序会产生core文件,其它程序可能会读取到相应信息;或者如果有些应用程序可以读取我们内存的时候;这都会导致我们的明文密码被读取到。(这里的明文"cleartext",意思是我们在输入提示处输入的并且通过getpass被打印出来的密码。大多数UNIX系统程序会接着将这个明文的密码变成一个"加密的密码"。例如,password的pw_passwd成员就包含了加密的密码而不是明文的密码)。
网友评论