• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] Ukrywanie hasła w konsoli ('*' zamiast znaku)

Object Storage Arubacloud
0 głosów
1,441 wizyt
pytanie zadane 6 marca 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

Witam! Staram się napisać ukrywanie znaków w konsoli. Na razie mam takie coś:

int key=0;
        cout<<"\tPassword: ";
        string pass;
        while(1){
            if(kbhit()){
                key = getch();
                switch(key){
                    case 13:
                        break;
                    case 27:
                        break;
                    case 8:
                        if(pass.length()==0)break;
                        cout<<"\b";
                        cout<<" ";
                        pass = pass.substr(0, pass.length()-1);
                        break;
                    default:
                        char ch = key;
                        cout<<"*";
                        pass+=key;
                        break;
                }
            }
            if(key==13)break;

            Sleep(30);
        }

        if(pass.compare("pass")==0){
            color(11);
            cout<<"\n\tAccess granted!\n"<<endl;
        }
        else{
            color(13);
            cout<<"\n\tAcces Denied!"<<endl;
            return;
        }

 

I wszystko działa, string jest dobrze "ucinany" lub "dodawany" w zależności czy nacisnęło się literę czy backspace. Jednakże kiedy próbuję klikać backspace, to usuwa się tylko ostatnia litera i nic :/. Video: https://sendvid.com/x0qiu0dz

 

komentarz 6 marca 2018 przez Knayder Nałogowiec (37,640 p.)
Mówiłem żebyś się za sfml'a wziął ;)
komentarz 6 marca 2018 przez Hiskiel Pasjonat (22,830 p.)
Nie. Piszę emulator do cmd (w zasadzie kończę). I teraz mam ten problem.
komentarz 6 marca 2018 przez Knayder Nałogowiec (37,640 p.)

@Swipeyro, To ci chociaż tipa sprzedam:
coś takiego:
 

case 1:
    break;
case 2:
    break;

możesz zapisać tak:
 

case 1:
case 2:
    break;

 

komentarz 6 marca 2018 przez Hiskiel Pasjonat (22,830 p.)
Hmm.. No w sumie racja, nie ma breaka, więc przejdzie dalej. A dalej jest break. Thx.

2 odpowiedzi

0 głosów
odpowiedź 6 marca 2018 przez Filius Gaduła (4,120 p.)

może coś takiego? 

#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
int main(){
   string pass ="";
   char ch;
   cout << "Enter pass\n";
   ch = _getch();
   while(ch != 13){//character 13 is enter
      pass.push_back(ch);
      cout << '*';
      ch = _getch();
   }
   if(pass == "Mitsakos"){
      cout << "\nAccess granted :P\n";
   }else{
      cout << "\nAccess aborted...\n";
   }
}

 

komentarz 6 marca 2018 przez Hiskiel Pasjonat (22,830 p.)
A co z backspacem?
0 głosów
odpowiedź 6 marca 2018 przez Beginer Pasjonat (22,110 p.)
Niedawno 9 lutego 2018 był podobny temat: "Wpisywanie hasła i wyświetlanie gwiazdek zamiast liter, scalanie tablic znaków". Tamten kod testowałem, działał dobrze (z niewielkimi zmianami). Spróbuj podejrzeć, może uda się coś zaimplementować.
komentarz 7 marca 2018 przez Beginer Pasjonat (22,110 p.)
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

int main()
{
    char Pass[2] = {}; //tablica SOURCE (zrodla)
    char FL[15] = {}; //tablica DESTINATION (przeznaczenia)

    for (int i = 0; i < 14; i++) // ilosc znakow w hasle
    {

     Pass[0] = getch();
     printf("%c", Pass[0]);

     Sleep(500);
     printf("\b");
     printf("*");

     strcat(FL, Pass);
    }
    cout << endl;
    cout << FL << endl;

    return 0;
}

Kod, który zamieściłem pozwala wprowadzić 14-znakowe hasło, zawierające dowolne znaki (może być również spacja). W razie potrzeby możesz dowolnie ustawić długość hasła zmieniając odpowiednio rozmiar tablicy FL oraz warunek w pętli for. (Czas wyświetlania znaku 500ms).

Podobne pytania

0 głosów
2 odpowiedzi 434 wizyt
pytanie zadane 8 marca 2018 w Offtop przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 336 wizyt
pytanie zadane 15 maja 2020 w C i C++ przez Czarus Obywatel (1,310 p.)
0 głosów
1 odpowiedź 136 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...