perl: Passworteingabe mit '*'-Echo

Dieses Thema: "perl: Passworteingabe mit '*'-Echo" im Forum "Ruby, php, Perl, Python ..." wurde erstellt von Xanti, 15.02.2006.

  1. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Hallo,

    eine Anfrage hier im Forum bezüglich Passworteingabe mit *-Ausgabe für jeden Buchstaben (siehe hier)
    hat mich auf die Idee gebracht, dies mal unter perl zu probieren. Folgendes hab ich bis jetzt:

    Code:
    #!/usr/bin/perl
    use Term::ReadKey;
    
    ReadMode 'noecho';
    do {
    	$key = ReadKey 0;
    	$pass .= $key;
    	print '*'
    } until ($key eq "\n");
    ReadMode 0;
    
    Leider scheint ReadKey die Ausgabe zu blockieren, was sich darin zeigt, dass die Sterne erst nach Abschluss der Eingabe mit <Enter> ausgegeben werden.

    Vielleicht hat jemand schon mal sowas programmiert und könnte mir auf die Sprünge helfen ;)

    Gruss, Phorus
     
  2. Anzeige

    Schau dir mal diesen Ratgeber an. Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 15.02.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo Phorus
    Dann solltest du eventuell die Eingabe entpuffern.
    $|=1;
    Kann es gerade nicht testen, da ich das Modul hier nicht installiert habe.

    HTH
    Gruß Wolfgang
     
  4. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Hallo Wolfgang,

    hat leider keine Änderung gebracht.

    Gruss, Phorus
     
  5. #4 Wolfgang, 15.02.2006
    Zuletzt bearbeitet: 15.02.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Wenn ich mich recht erinnere, geht das nur mit
    ReadMode ('raw');

    Schau es mir später nochmal an, habe momentan wenig Zeit.

    Gruß Wolfgang
     
  6. #5 Xanti, 15.02.2006
    Zuletzt bearbeitet: 15.02.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Klasse, das wars. Mit 'raw' gehts. Danke Wolfgang.

    edit: der Vollständigkeit halber hier mein funktionierender Code

    Code:
    ...
    sub getpassphrase {
    	print "enter passphrase: ";
    	ReadMode 'raw';
    	my $passphrase;
    	while (1) {
    		my $key .= (ReadKey 0);
    		if ($key ne "\n") {
    			print '*';
    			$passphrase .= $key
    		} else {
    			last
    		}
    	}
    	ReadMode 'restore';
    	return $passphrase
    }
    ...
    
    Dieses if-konstrukt in der while-Schleife nutze ich, damit ich beim Enter-Drücken kein '*' bekomme.

    p.s.: $|=1 ist nicht nötig.
     
  7. #6 Wolfgang, 15.02.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo Phorus
    Ja, das $| is nicht nötig, weil das Entpuffern ja vom Modul übernommen wird.

    Dein If Konstrukt ließe sich aber etwas kürzen.
    Code:
    ...
    while (1) {
                    last if ($key eq "\n");
    		my $key .= (ReadKey 0);
    		print '*';		
    		}
    
    Das ist aber nicht zwingend.
    Weil ich tippfaul bin, würde ich das wohl so machen.
    ;)

    Gruß Wolfgang
     
  8. #7 Xanti, 15.02.2006
    Zuletzt bearbeitet: 16.02.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Ich bin für jede Verkürzung meines Quellcodes dankbar, schließlich bin ich schon bei 300 Zeilen :think:


    Nur ein kleiner Fehler:
    Code:
    last if ($key eq "\n");
    
    sollte

    Code:
    last if ($key =~ /\n/);
    
    sein, oder?

    Gruss, Phorus

    edit: Leider hab ich bei Deinem Beispiel trotzdem das Problem, dass <Enter> ein '*' liefert.

    edit2: So gehts:

    Code:
    while (1) {
      $passphrase .= (ReadKey 0);
      last if ($passphrase =~ /\n/);
      print '*';		
    }
    chop $key;
    
     
  9. #8 Wolfgang, 15.02.2006
    Zuletzt bearbeitet: 15.02.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ja stimmt, Fehler von mir.
    Das ist klar, weil die Runde ja trotzdem absolviert wird.
    So schnell landet man in der Falle.


    Gruß Wolfgang
    PS Konnte es nicht testen, sonst wär ich wohl eher darauf gestoßen.

    Ich werde langsam zu alt dafür. ;)

    last if ($passphrase=~/^\n/); ist wohl genauer.
     
  10. #9 Xanti, 15.02.2006
    Zuletzt bearbeitet: 16.02.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Quatsch, warst 'ne grosse Hilfe.

    edit:

    ..., wennschon
    last if ($passphrase=~/\n$/) ;)

    p.s.: Wenn diese Abfrage fehlerhaft ist, kann nicht mal Ctrl+C das Programm beenden. Dann hilft nur Programm killen... :)
     
Thema:

perl: Passworteingabe mit '*'-Echo

Die Seite wird geladen...

perl: Passworteingabe mit '*'-Echo - Ähnliche Themen

  1. Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern

    Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern: Das Hyperledger-Projekt der Linux Foundation will eine neue Form der dezentralisierten Kontoführung nach dem Prinzip der »distributed ledger« bei...
  2. Perl 6 offiziell vorgestellt

    Perl 6 offiziell vorgestellt: Wie erwartet, ist die Version C(hristmas) von Perl 6 veröffentlicht worden. Perl 6 stellt nicht, wie der Name suggeriert, einen Nachfolger von...
  3. Perl: 20 Jahre CPAN

    Perl: 20 Jahre CPAN: Vor 20 Jahren wurde das erste Modul in das Comprehensive Perl Archive Network (CPAN) hochgeladen, woran Neil Bowers mit einem Abriss der...
  4. Perl 5.22.0 freigegeben

    Perl 5.22.0 freigegeben: Die neue Version 5.22 von Perl bringt den Anwendern mehr Sicherheit bei Eingabedateien, Unicode 7.0 und zahlreiche weitere Verbesserungen....
  5. [Perl] Perl OO Methodenaufruf in anderem Objekt

    [Perl] Perl OO Methodenaufruf in anderem Objekt: Hallo, Ich bin dabei in Perl ein Pokerspiel zu programmieren, hänge aber momentan an einem Problem, wo ich nicht weiterkomme. Ich habe die...