Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1315356
  • 博文数量: 213
  • 博客积分: 7590
  • 博客等级: 少将
  • 技术积分: 2185
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-31 17:31
个人简介

热爱开源,热爱linux

文章分类

全部博文(213)

文章存档

2018年(4)

2017年(1)

2015年(1)

2014年(5)

2013年(2)

2012年(2)

2011年(21)

2010年(82)

2009年(72)

2008年(23)

分类: LINUX

2010-09-18 22:00:47


前两天到小组,有人问如何使用C语言编写读入一行密码而不显示密码明码,我当时就想到大一时候编写过类似程序,就想用类似方法实现一下,然而linux C 下没有getch()函数,于是上网查了查资料,发现可以C语言可通过使用tcgetattr函数和tcsetattr函数来实现,我写了个简单的实现如下:

/* Standard C header */
#include <stdio.h>        /* for getchar(), printf() */

/* POSIX headers */
#include <termios.h>        /* for tcxxxattr, ECHO, etc */
#include <unistd.h>        /* for STDIN_FILENO */

#define LENGTH 8        /*Password length */

int main(void)
{
    char password[LENGTH];
    int len = 0;
    int ch;
    struct termios oldt, newt;
    printf("please input you password:");
    while (1) {
        if (len < LENGTH) {
            tcgetattr(STDIN_FILENO, &oldt);
            newt = oldt;
            newt.c_lflag &= ~(ECHO | ICANON);
            tcsetattr(STDIN_FILENO, TCSANOW, &newt);
            ch = getchar();
            printf("*");
            tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
        } else {
            printf("\nPassword must less then 8\n");
            break;
        }
        len = len + 1;
    }
    return 0;
}


2.下面是shell实现不回显的实现

(1)方法就是:

stty -echo #设置输入字符不回显

#此处用read语句接收用户输入的内容

stty echo #取消不回显状态

代码如下


#!/bin/bash

passwd=""
echo -n "Please input password:"
stty -echo
read passwd
echo
stty echo
echo "The password is $passwd"


(2)其实shell中的 read的-s选项直接就可以实现输入内容不回显。如下实现

#!/bin/bash


passwd=""
echo -n "Please input password:"
read -s passwd
echo
echo "The password is $passwd"


阅读(4010) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~