曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4080|回复: 0
打印 上一主题 下一主题

[常规] getpass() -- 获取一个密码输入

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-12-27 10:41:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 23:50 , Processed in 0.067213 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表