用c语言实现密码安全的程序?

时间:2011-10-08 10:46:36

标签: c++ c

知道如何在c或c ++中使用此功能

密码= * ** * ****

但最后系统获得正确的密码(意味着实际输入),但其他人看到了这一点。

4 个答案:

答案 0 :(得分:3)

要确认用户的密码,请使用pamofficial page托管在kernel.org上,因此在撰写时保持不变),特别是pam_authenticate

如果您的应用程序有自己的身份验证体系结构(并且大部分时间都不应该),请执行stty -echo,请求密码,然后执行stty echo以恢复原始行为。

答案 1 :(得分:2)

您需要告诉终端在输入过程中抑制回声。也许您的操作系统已经提供了从终端读取密码的功能。它可能被称为getpasswordgetpassgetpasswd

请参阅命令stty以获取终端选项的概述。

答案 2 :(得分:1)

为了在不使用库的情况下实现,你可以使用getch获取按下的字符并打印*来自getch的任何字符并使用任何键进行转义(这里我使用回车)。

示例代码

  while(true) {
       ch = getch();
     if(ch== 13)   // ASCII Code for Enter Key 
         break;
     cout<<"*";
  }

答案 3 :(得分:0)

关闭回声

http://www.cplusplus.com/forum/general/12256/

#include <windows.h>

void echo( bool on = true )
  {
  DWORD  mode;
  HANDLE hConIn = GetStdHandle( STD_INPUT_HANDLE );
  GetConsoleMode( hConIn, &mode );
  mode = on
       ? (mode |   ENABLE_ECHO_INPUT )
       : (mode & ~(ENABLE_ECHO_INPUT));
  SetConsoleMode( hConIn, mode );
  }

POSIX

#include <termios.h>
#include <unistd.h>

void echo( bool on = true )
  {
  struct termios settings;
  tcgetattr( STDIN_FILENO, &settings );
  settings.c_lflag = on
                   ? (settings.c_lflag |   ECHO )
                   : (settings.c_lflag & ~(ECHO));
  tcsetattr( STDIN_FILENO, TCSANOW, &settings );
  }