c++中的登录程序密码屏蔽增强

Posted

技术标签:

【中文标题】c++中的登录程序密码屏蔽增强【英文标题】:Login Program password masking enhancement in c++ 【发布时间】:2016-06-23 03:33:43 【问题描述】:

几天前,我曾向你们寻求帮助,以获得 C++ 中的高级(某种)登录系统。感谢您的支持,我确实做对了,但现在我希望为程序添加更多功能。目前,它能够接收用户名字符串,接收密码字符字符串并屏蔽密码,并一次又一次地将它们与预设值进行比较,直到它们匹配。 现在,问题在于,由于我使用getchar() 将数据输入到 char 数组中,即使我按下 Enter 键,它也会将其作为数组的输入。另外,我最多只能输入 8 个字符的值,之后,即使不按 Enter,它也会自动进入下一步。 我希望修改代码,使其可以将任意数量的字符作为输入,屏蔽它们,然后,当用户按下 Enter 时,它会停止获取更多的值来填充更多的数组字符.所以基本上,几乎就像cin,除了它为输入的每个字符回显'*'。这是我的代码:

#include <iostream.h>  
#include <stdlib.h>  
#include <conio.h>` 

using namespace std;  
int main()  

   int i=0;string u,p;char parr[8],ch;  
   while (1)
    
 system("cls");
 cout<<"Enter username."<<endl;
 cin>>u;
 system("cls");
 cout<<"Enter password."<<endl;
 for (i=0;i<=7;++i)
 
     ch=getch();
     parr[i]=ch;
     cout<<'*';
 

 parr[8]='\0';
 string p="password";

 if (u=="username" && parr==p)
 
    system("cls");
    cout<<"Welcome!";
    break;
         

 else
 
     system("cls");
     cout<<"Username and password entered does not match! Please try again.";
 
 getch();
       
     getch();
  

【问题讨论】:

【参考方案1】:

在 Enter 后添加退出条件,将数组展开到相当大的大小:

char parr[30];

cout << "Enter password." << endl;

for (i = 0; i < 29; ++i)

    ch=getch();
    if (ch == '\r')
    
        parr[i] == '\0';
        break;
    
    parr[i]=ch;
        cout<<'*';

parr[29] = '\0';

【讨论】:

哇!回车用'\r'表示?但是我在谷歌搜索的所有地方都是'\n'......这就是为什么我在尝试同样的事情时出错了。无论如何,谢谢你的回复。效果很好。 顺便问一下,你知道有什么方法可以不考虑退格键吗?

以上是关于c++中的登录程序密码屏蔽增强的主要内容,如果未能解决你的问题,请参考以下文章

C++:从文件/用户名和密码读取

请问如何写一个C++的密码登陆代码,如果密码错误超过三次就自动退出,正确就运行接下来的程序...谢谢

密码屏蔽(输入显示为********)

如何将 Web 应用程序的登录名和密码数据传递到桌面应用程序而不造成任何安全风险

通过像 Unix/Linux 中的期望脚本一样通过 c++ 提供登录名和密码

C++ 中的 Vigenere 密码错误