曲径通幽论坛

标题: getpass() -- 获取一个密码输入 [打印本页]

作者: beyes    时间: 2011-12-27 10:41
标题: getpass() -- 获取一个密码输入
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!





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2