C/C++如何使用密码输入而不回显--getch()函数
2015-05-29 16:25
429 查看
这是我在做课程设计时遇到的问题,如何在管理员进入系统时输入密码不会显示出来而泄露信息,这里使用到C语言函数库
#include <conio.h>
里面有一个输入函数 getch();这个函数跟getchar();功能几乎一样,不同点就是使用getch()输入字符时不会在控制台显示出来,所以正是利用这一点来隐藏密码的。
但要注意的是:它会吧键盘上所有按键都录入,包括撤销Backspace;而Backspace的ASIIC码值是8;所以只要加个判断即可解决!下面看代码:
printf("请输入管理员账号,密码:回车键结束\n");
printf("账号:");
scanf("%s",id);
printf("密码:");
while((ch=getch())!='\r')
{
if(ch!=8)//不是回撤就录入
{
s[i]=ch;
putchar('*');//并且输出*号
i++;
}
else
{
putchar('\b');//这里是删除一个,我们通过输出回撤符 /b,回撤一格,
putchar(' ');//再显示空格符把刚才的*给盖住,
putchar('\b');//然后再 回撤一格等待录入。
i--;
}
}
password[i]='\0';
printf("%s",password);
if((!strcmp(s,PASSWORD))&&(!strcmp(id,ID)))
{//下面是系统内部
这是一个小技巧而已。觉得有点好玩,所以就写出来跟大家分享了。第一篇博客希望大家多多包涵。
#include <conio.h>
里面有一个输入函数 getch();这个函数跟getchar();功能几乎一样,不同点就是使用getch()输入字符时不会在控制台显示出来,所以正是利用这一点来隐藏密码的。
但要注意的是:它会吧键盘上所有按键都录入,包括撤销Backspace;而Backspace的ASIIC码值是8;所以只要加个判断即可解决!下面看代码:
printf("请输入管理员账号,密码:回车键结束\n");
printf("账号:");
scanf("%s",id);
printf("密码:");
while((ch=getch())!='\r')
{
if(ch!=8)//不是回撤就录入
{
s[i]=ch;
putchar('*');//并且输出*号
i++;
}
else
{
putchar('\b');//这里是删除一个,我们通过输出回撤符 /b,回撤一格,
putchar(' ');//再显示空格符把刚才的*给盖住,
putchar('\b');//然后再 回撤一格等待录入。
i--;
}
}
password[i]='\0';
printf("%s",password);
if((!strcmp(s,PASSWORD))&&(!strcmp(id,ID)))
{//下面是系统内部
这是一个小技巧而已。觉得有点好玩,所以就写出来跟大家分享了。第一篇博客希望大家多多包涵。
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
相关文章推荐
- C++作业4.18
- 【干货】国外程序员整理的 C++ 资源大全–日常工作,我觉得用处确实很大,所以分享
- 【干货】国外程序员整理的 C++ 资源大全–日常工作,我觉得用处确实很大,所以分享
- C++ 写leetcode遇到的一些问题总结Implement strStr()
- C++读取并逐行显示txt内容
- C语言特性
- C/C++计时方法及精度
- C++中placement new
- VC++6.0 IDE的工程用Code::Blocks来打开、编译、调试终极配置方案
- c++原生的unicode支持
- 【 Sqrt(x) 】cpp
- C++转Java自学之路(四)文档注释、静态代码块与对象初始化过程
- C++智能指针分类及使用
- 小心C语言localtime和asctime时间函数陷阱
- C语言结构体中冒号的用法--C 位域
- C++知识点总结(四)——面向对象的编程细节总结
- C++知识点总结(四)——面向对象的编程细节总结
- VS2010 C++ MFC框架学习笔记2 - 创建一个简单的加法计算器(2)
- c语言应该怎么学
- C语言中引用其他模块定义的变量的方法