C++ 密码保护错误,我需要帮助:D

Posted

技术标签:

【中文标题】C++ 密码保护错误,我需要帮助:D【英文标题】:C++ Password protection error and i need help :D 【发布时间】:2014-06-19 18:43:32 【问题描述】:

我想知道是否有任何代码可以使您输入的内容(例如,Hello 变为 *****)变得不可读。

我有这个代码

string pass;

当您输入“cin”时,我不希望任何人能够阅读它。

cin >> pass;
cout << pass;

【问题讨论】:

不在标准 C++ 的范围内。也许你的操作系统提供了一个直接控制文本 I/O 的库。 创建一个计算字符数量的函数,为每个字符添加一个 * 并返回密码编码文本 你可以查看这些***.com/questions/13694170/…***.com/questions/1413445/read-a-password-from-stdcin @Rynoh97 我真的不知道该怎么做:/ 完全隐藏输入可能就足够了? 【参考方案1】:

这里我们用星号屏蔽输入。我们使用tcgetattr/tcsetattr 来获取和设置终端属性,因此在标准输入上禁用回显,我们在每个字符用户输入上打印"*"

#include <iostream>
#include <string>
#include <termios.h>
#include <stdio.h>

int getch() 
    struct termios oldtc, newtc;
    int ch;
    tcgetattr(STDIN_FILENO, &oldtc);
    newtc = oldtc;
    newtc.c_lflag &= ~(ICANON | ECHO);
    tcsetattr(STDIN_FILENO, TCSANOW, &newtc);
    ch=getchar();
    tcsetattr(STDIN_FILENO, TCSANOW, &oldtc);
    return ch;



int main(int argc, char **argv) 

    int ch;
    printf("Press ENTER to exit.\n\n");

    for (;;) 

        ch = getch();

        if(ch == '\n')
              break;
        printf("*");
    

    return 0;

【讨论】:

【参考方案2】:

下面的代码在 Visual Studio 2012(也是 VC6.0)上经过测试和运行。访问http://msdn.microsoft.com/en-us/library/aa297934%28v=vs.60%29.aspx了解更多关于函数_getch()的信息。

_getch():从控制台获取不带回显(_getch)或带回显(_getche)的字符。

#include <iostream>
#include <string>
#include <conio.h>

int main()

    std::string pass;
    for(int c; c = _getch(); )
        if(c=='\r' || c=='\n' || c==EOF)
            break;
        else
            pass += c;
            std::cout << '*';
        
    

    std::cout << "\nYour password is: " << pass << std::endl;
    return 0;

【讨论】:

以上是关于C++ 密码保护错误,我需要帮助:D的主要内容,如果未能解决你的问题,请参考以下文章

错误帮助:ISO C++ 禁止声明没有类型的“向量”

Navicat 8 for MySQL怎么总是连接不了,是否需要用户名和密码.求各位大大帮助

密码认证 c++

如何在 TextInputLayout Android 中实现这样的密码错误?

继承受保护函数和公共变量 C++ 的多重继承编译错误

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