centos7-输入密码显示星号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos7-输入密码显示星号相关的知识,希望对你有一定的参考价值。

参考技术A 场景描述:默认情况,当普通用户 sudo - root ,需要输入档期那登陆用户的密码,但是输入以后,没有任何显示。

处理方案: su - root , visudo ,修改配置如图所示:

效果:当普通用户再次切换到root用户时,输入密码,会显示星号。

C++ - 使用 do while 验证密码(输入星号)

【中文标题】C++ - 使用 do while 验证密码(输入星号)【英文标题】:C++ - Password validation with do while (entering asterisks signs) 【发布时间】:2020-09-28 13:39:14 【问题描述】:

从标题中可以看出,我想检查密码,但使用 do while 循环。我想要做的是,要求用户输入密码,如果密码输入错误 3 次,程序应该退出。

这里是代码,希望你明白我想要做什么

#include <iostream>
#include <conio.h>
using namespace std;

int main()

    int n = 0;
    char s[10] = 's','a','m','e','d';
    char unos[10];
    int i;
    do
    
        for (i = 0; i < 5;i++) 
        unos[i] = _getch(); 
        _putch('*');

    
    cout << endl;
    for (i = 0; i < 5; i++)
      
    if (unos[i] == s[i])
        
            cout << "Your password is correct" << endl;
            break;
        
        else if (unos[i] != s[i])
        
            do
            
            cout << "Your password is incorrect" << endl;
            cout << "Enter again: "; 
             for (i = 0; i < 5;i++) 
             unos[i] = _getch(); 
            _putch('*');
           
            n++; // how many times user entered the password        
            while(unos[i] != s[i]);
           
       
    while(unos[i] != s[i] && n < 3);

    return 0;

控制台输出是正确的,或者如果我第一次输入正确的密码,它会执行我想要的操作,但如果我犯了错误,之后它不会执行任何操作,或者实际上它确实再次要求我输入密码但是它不,显示消息Your password is correct。 如果您现在即使使用递归也如何完成此任务,它将对我有很大帮助。 在此先感谢:)

【问题讨论】:

&lt;conio.h&gt; 仅适用于 Windows,添加 [windows] 标签会很好。 【参考方案1】:

浏览互联网,我读到了http://www.cplusplus.com/articles/E6vU7k9E/。 为什么不使用那里描述的 getch 和 getpass 函数,主要建议更容易阅读?

int main()

  string s = 's','a','m','e','d';
  string unos;
  int ntry (0);
  bool ok (false);
  while (!ok && (ntry < 3)) 
    unos = getpass("Please enter the password: ",true);
    if(unos==s) 
      cout <<"Correct password"<<endl;
      ok = true;
    
    else 
      if (ntry < 2) 
        cout <<"Incorrect password. Try again"<<endl;
      
      else 
        cout << "access denied" << endl;
      
      ++ntry;
    
  
  return 0;

【讨论】:

【参考方案2】:

以下循环永远不会结束:

            do
        
        cout << "Your password is incorrect" << endl;
        cout << "Enter again: "; 
         for (i = 0; i < 5;i++) 
         unos[i] = _getch(); 
        _putch('*');
       
        n++; // how many times user entered the password        
        while(unos[i] != s[i]);

1) n &lt; 3 是在这个循环之外完成的,所以不考虑次数

2) 在while(unos[i] != s[i]); i = 5 的时刻(您之前声明了 i),因此您正在比较 unos[5]s[5]。这些值未初始化。

此代码中还有其他问题: 如果提到的循环结束,它将退出到for (i = 0; i &lt; 5; i++),它也没有检查n。 我认为主要问题是您只检查输入密码的第一个字母,因此输入“sqwer”会给您“您的密码正确”。

此代码应完全重新编写。 工作示例(如果继续您的想法)如下所示:

#include <conio.h>
#include <iostream>
using namespace std;

int main() 
    int n = 0;
    char s[10] =  's', 'a', 'm', 'e', 'd' ;
    char unos[10];
    bool is_pwd_correct = false;

    do 
        for (int i = 0; i < 5; i++) 
            unos[i] = _getch();
            _putch('*');
        

        for (int i = 0; i < 5; i++) 
            if (unos[i] != s[i]) 
                n++;
                cout << endl << "Your password is incorrect" << endl;
                break;
             else if (i == 4) 
                is_pwd_correct = true;
                cout << endl << "Your password is correct" << endl;
            
        
     while (!is_pwd_correct && n < 3);

但是我建议使用字符串而不是 char 数组,并且不要使用仅适用于 Windows 的 conio.h。 此外,添加对密码大小的处理也是一个好主意。

【讨论】:

以上是关于centos7-输入密码显示星号的主要内容,如果未能解决你的问题,请参考以下文章

winform输入密码的控件中怎样使输入的密码显示星号

C++ - 使用 do while 验证密码(输入星号)

如何在应用程序设计器中显示星号以供输入?

如何将密码回显为星号

如何使用 DevExpress WinForms TextEdit 作为密码输入(带星号)?

Python实现控制台密码星号输入