skrytie znakov v shelli

Sekcia: Programovanie 23.02.2008 | 18:23
Avatar slazer   Používateľ
Zdravim!
Chcel by som sa spytat akym sposobom je mozne v linuxe skryt znaky, ktore vkladam do konzoly. Napriklad ked spustim program "su" tak mi vypise prompt
#########
Password:
#########
a kazdy dalsi znak az po ENTER je neviditelny. Neviem ci je to zalezitost programovacieho jazyka (C++) alebo nejakeho nastavenia v shelli. Dakujem za odpoved.
    • Re: skrytie znakov v shelli 23.02.2008 | 20:00
      Avatar uid0 Debian  Používateľ
      to ze ti ich program nevypisuje, nemusi znamenat, ze ich tak poctivo skryva ako ked zadavas heslo

      je to zalezitost programu alebo terminalu
      Debian. apt-get into it…
      • Re: skrytie znakov v shelli 23.02.2008 | 20:24
        Slazer   Návštevník
        Povedzme teda ze mi nejde o bezpecnosti, len o skrytie navonok, teda aby sa znaky nachvilu nezobrazovali na obrazovke. Akym prikazom sa to zobrazovanie da "docasne" vypnut?
        • Re: skrytie znakov v shelli 23.02.2008 | 22:21
          Avatar uid0 Debian  Používateľ
          toto sa nemusi vypinat, staci ked to nebudes vypisovat
          Debian. apt-get into it…
          • Re: skrytie znakov v shelli 24.02.2008 | 12:20
            Slazer   Návštevník
            Ale ja nic nevypisujem, len pouzivam standardny vstup v C++
            ...
            cout<<"Vlozte prosim heslo: ";
            char pole[255];
            cin.getline(pole, 255); //tu sa vklada heslo, ale vlozene znaky su VIDITELNE
            cout<<"\nHeslo vlozene";
            ...

            Vystup: Vlozte prosim heslo: mojeheslo
            Heslo vlozene

            Pozadovany vystup: Vlozte prosim heslo:
            Heslo vlozene
            • Re: skrytie znakov v shelli 24.02.2008 | 12:44
              Avatar uid0 Debian  Používateľ
              a co nejake cin.getch()?

              mozno by si sa mal chvilu venovat aspon standardnej kniznici, ked uz chces robit v C++ ale ignorovat C
              Debian. apt-get into it…
              • Re: skrytie znakov v shelli 24.02.2008 | 23:07
                Slazer   Návštevník
                cin.getch() je fajn len mi trocha vadi ze vystup je len jeden char a ja by som potreboval naplnit pole znakov..ok da sa to aj cez slucku ale to je jedno. Na standardnu kniznicu sa urcite pozriem, ale momentalne som sa tam este nedostal. Na to ci treba vediet C aby si sa ucil C++ ma kazdy iny nazor.. Ja som vybral cestu C++.
                Dakujem za pomoc a zatvaram tetnto thread.
              • Re: skrytie znakov v shelli 25.02.2008 | 00:30
                Avatar slazer   Používateľ
                Oprava.
                Skusal som to cin.getch() v tvare cin.getch(znak) dalej v tvare zn=cin.getch() a takisto s predponou "std::" pod Ubuntu linuxom 7.10 gutsy s kompilatorom g++ ale vypisalo mi chybu nevidit.cc:6: error: ‘struct std::istream’ has no member named ‘getch’ Vlozene kniznice boli IOSTREAM, STDIO.H

                • Re: skrytie znakov v shelli 25.02.2008 | 08:30
                  Avatar uid0 Debian  Používateľ
                  tak potom C++ to nema, getch() je funkcia z libc
                  Debian. apt-get into it…
                • Re: skrytie znakov v shelli 25.02.2008 | 10:39
                  Avatar borg Fedora  Administrátor
                  cin.get().
                  • Re: skrytie znakov v shelli 25.02.2008 | 10:46
                    Slazer   Návštevník
                    Ked pouzijem CIN.GET() tie znaky sa BUDU zobrazovat na terminaly. Ja chcem aby ich nebolo vidno.
                    • Re: skrytie znakov v shelli 25.02.2008 | 10:59
                      Avatar borg Fedora  Administrátor
                      ja som reagoval na to, ze cin.getch() neexistuje.
    • Re: skrytie znakov v shelli 24.02.2008 | 12:41
      Avatar Miroslav Bendík Gentoo  Administrátor
      stty_o=`stty -g`
      stty -echo
      echo -n "Passwowrd : "
      read heslo
      stty $stty_o
      echo -e "\nHeslo je \"$heslo\""
      • Re: skrytie znakov v shelli 24.02.2008 | 23:25
        Avatar slazer   Používateľ
        Diky moc..toto som potreboval. Mimochodom netreba ukladat celu konfiguraciu stty, lebo zobrazovanie sa da naspat zapnut prikazom stty echo
      • Re: skrytie znakov v shelli 03.03.2008 | 22:24
        Slazer   Návštevník
        Oprava. Toto však vloží heslo len do shellovej premennej. Ja potrebujem heslo vložiť do premennej v programe C++.
    • Re: skrytie znakov v shelli 25.02.2008 | 12:04
      Slazer   Návštevník
      OK tak po par hodinach googlovania a skusania som prisiel na celkom elegantny sposob ako to spravit. Zistil som ze neexistuje ziadna standardna funkcia v STDLIB C/C++ ktora sluzi na toto. Vacsinou je to zavisle od kompilatora a platformy. Toto je kod C++, ktory to spravi:
      #include <iostream>
      #include <unistd.h>

      int main()
      {
      char * z=new char;
      z=getpass("Vloz heslo");
      std::cout<<"Heslo je: "<<z;
      return 0;
      }
      • Re: skrytie znakov v shelli 25.02.2008 | 12:54
        Avatar uid0 Debian  Používateľ
        getpass() je deprecated IIRC
        Debian. apt-get into it…
        • Re: skrytie znakov v shelli 03.03.2008 | 22:30
          Slazer   Návštevník
          Tak si to zrekapitulujme.
          Pre C mame funkciu getch()
          Pre C++ mame funkciu getpass(), ktorá je deprecated
          Takže pre C++ neexistuje nič v súhlade so štandardom pre prebratie hesla? Platforma je linux x86
          • Re: skrytie znakov v shelli 03.03.2008 | 23:45
            Avatar uid0 Debian  Používateľ
            HISTORY
                   A getpass() function appeared in Version 7 AT&T UNIX.
            
            CONFORMING TO
                   Present in SUSv2, but marked LEGACY.  Removed in POSIX.1-2001.
            

            nie si nejaky vztahovacny? bolo v dobe v7 AT&T UNIX vobec C++?
            Debian. apt-get into it…
            • Re: skrytie znakov v shelli 09.03.2008 | 22:26
              Slazer   Návštevník
              Ahoj,
              prepac, ale neviem co si myslel tou vztahovacnostou..ja som len sumarizoval ako stojime s odpovedou na moju otazku. Cize getpass() je len nejake volanie operacneho systemu *nix, ktore nema nic spolocne s jazykom C/C++? Takze mozem topic uzavriet s tym ze najlepsie je poucit tuto funkciu (napriek tomu ze je deprecated)?
              • Re: skrytie znakov v shelli 09.03.2008 | 22:45
                Avatar uid0 Debian  Používateľ
                co je volanie operacneho systemu?
                Debian. apt-get into it…
          • Re: skrytie znakov v shelli 04.03.2008 | 01:06
            Avatar Samuel BWPOW Kupka Almalinux, OpenWRT  Používateľ
            #include <iostream>
            #include <termios.h>
            #include <string>
            
            std::string mygetpass(void)
            {
              struct termios oldt, newt;
              std::string s;
            
              tcgetattr ( STDIN_FILENO, &oldt );
              newt = oldt;
              newt.c_lflag &= ~( ICANON | ECHO );
              tcsetattr ( STDIN_FILENO, TCSANOW, &newt );
              std::cin >> s;
              tcsetattr ( STDIN_FILENO, TCSANOW, &oldt );
            
              return s;
            }
            
            int main(void)
            {
              std::cout << "Zadaj heslo: ";
              std::string s=mygetpass();
              std::cout << std::endl << "Zadane heslo bolo: " << s << std::endl;
            }
            
            Nemas zac :)
            Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
            • Re: skrytie znakov v shelli 04.03.2008 | 09:46
              Avatar uid0 Debian  Používateľ
              naozaj nema, ked si len prepisal GNU getpass() do "C++" :P
              Debian. apt-get into it…
              • Re: skrytie znakov v shelli 04.03.2008 | 14:41
                Avatar Samuel BWPOW Kupka Almalinux, OpenWRT  Používateľ
                Ale je to C++ a nie je tam pouzita ziadna deprecated funkcia :) Nie ze by som ten kod vymyslel ja.
                Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity