vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - G?nnen Sie Ihrem SQL-Kommando diesen kr?nenden Abschlu?!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
Rubrik: Controls · TextBox & RichTextBox   |   VB-Versionen: VB4, VB5, VB621.12.01
Sichere Unsichtbare Eingabe

Mit diesem Code machen Sie Ihr Eingabefeld sicher vor unsicheren Augen und Spionier-Software.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  11.239 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Wenn Sie jemand fragen würde, "wie kann man ein Eingabefeld erstellen, in welchem man den eingegebenen Text nicht am Bildschirm sehen kann?", würden Sie ihm antworten: "einfach die PasswordChart-Eigenschaft verwenden, so dass z.B. lauter kleine Sternchen angezeigt werden".

    Korrekt!
    Mit dieser Aussage haben Sie völlig Recht. Egal, was der Anwender in das Eingabefeld eingibt - es werden immer nur die kleinen Sternchen angezeigt (oder das Zeichen, welches für PasswordChar festgelegt wurde).

    Nun soll es aber Programme geben, die es sich zur Aufgabe gemacht haben, genau solche "geschützten" Eingabefelder auszuspionieren, da ja hier meist vertrauliche Daten in Form von Passwörtern eingegeben werden.

    Diese Programme gibt es auch tatsächlich. Im Bereich Visual Basic Programmierung gibt es ein solches auch als Quellcode (PassSniff oder wie es auch immer heisst).

    Wie kann man sich und damit seine Anwender nun gegen solche "Spionage"-Programme schützen?

    Wir zeigen's Ihnen!

    Alles, was wir dazu brauchen, ist die Tag-Eigenschaft der TextBox. In dieser Eigenschaft speichern wir uns die Eingabe des Users im Klartext, also die Zeichen, die auch eingegeben wurden. Im Eingabefeld selbst zeigen wir anstelle der Zeichen aber immer nur Leerzeichen (oder Sternchen) an. Somit brauchen wir noch nicht einmal die PasswordChar-Eigenschaft.

    Und hier der Code

    Private Sub Text1_KeyPress(KeyAscii As Integer)
      Dim sText As String
      Dim lPos As Long
      Dim lLen As Long
     
      ' aktueller Inhalt
      sText = Text1.Tag
     
      ' Eingabeposition
      lPos = Text1.SelStart
     
      ' Falls Zeichen markiert sind -> Länge der Markierung
      lLen = Text1.SelLength
     
      Select Case KeyAscii
        Case 8
          ' Backspace
          If lLen > 0 Then
            ' markierten Textbereich löschen
            sText = Left$(sText, lPos) + _
              Mid$(sText, lPos + lLen + 1)
          Else
            If lPos > 0 Then
              ' Zeichen links von der Eingabemarke löschen
              sText = Left$(sText, lPos - 1) + _
                Mid$(sText, lPos + 1)
            End If
          End If
     
        Case Is > 31
          ' Zeichen an der Eingabemarke einfügen
          ' (ggf. Markierung ersetzen)
          sText = Left$(sText, lPos) + Chr$(KeyAscii) + _
            Mid$(sText, lPos + lLen + 1)
     
          ' Eingabe im Eingabefeld als Leerzeichen
          ' darstellen (42, falls Sternchen gewünscht ;-))
          KeyAscii = 32
     
      End Select
      Text1.Tag = sText
    End Sub
    Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
      Dim sText As String
      Dim lPos As Long
      Dim lLen As Long
     
      ' aktueller Inhalt
      sText = Text1.Tag
     
      ' Eingabeposition
      lPos = Text1.SelStart
     
      ' Falls Zeichen markiert sind -> Länge der Markierung
      lLen = Text1.SelLength
     
      Select Case KeyCode
        Case vbKeyDelete
          ' Entfernen-Taste
          If lLen > 0 Then
            ' markierten Textbereich löschen
            sText = Left$(sText, lPos) + _
              Mid$(sText, lPos + lLen + 1)
          Else
            If lPos > 0 Then
              ' Zeiche "unter" der Einfügemarke löschen
              sText = Left$(sText, lPos) + _
                Mid$(sText, lPos + 2)
            End If
          End If
     
        Case 86
          If Shift = 2 Then
            ' Strg+V verhinern
            ' (Einfügen aus der Zwischenablage)
            Clipboard.Clear
          End If    
      End Select
     
      ' neuen Inhalt in der Tag-Eigenschaft speichern
      Text1.Tag = sText
    End Sub

    Sie müssen jetzt nur daran denken, dass Sie anstelle der Text-Eigenschaft nun die Tag-Eigenschaft zum Auslesen der Eingabe verwenden.

    Beispiel:
    Zum Ausprobieren erstellen Sie ein neues Projekt und fügen der Form eine TextBox hinzu (Text1). Beim Laden der Form (Form_Load) wird der aktuelle Text-Inhalt (der ja durchaus zur Designzeit festgelegt werden kann) zunächst in die Tag-Eigenschaft geschrieben und der eigentliche Inhalt durch Leerzeichen ersetzt.

    Private Sub Form_Load()
      ' WICHTIG!
      Text1.Tag = Text1.Text
      Text1.Text = Space$(Len(Text1.Text))
    End Sub

    Plazieren Sie zur Kontrolle noch ein Label-Control auf die Form, so dass Sie prüfen können, ob die Eingabe auch wirklich korrekt in der Tag-Eigenschaft gespeichert wird.

    Die Aktualisierung des Label-Controls erfolgt sowohl im Text1_KeyPress, als auch im Text1_KeyDown-Ereignis:

    Private Sub Text1_KeyPress(KeyAscii As Integer)
      ...
     
      ' neuen Inhalt in der Tag-Eigenschaft speichern
      Text1.Tag = sText
     
      ' zur Kontrolle:
      Label1.Caption = Text1.Tag
    End Sub
    Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
      ...
     
      ' neuen Inhalt in der Tag-Eigenschaft speichern
      Text1.Tag = sText
     
      ' zur Kontrolle:
      Label1.Caption = Text1.Tag
    End Sub

    Dieser Tipp wurde bereits 11.239 mal aufgerufen.

    Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

    Über diesen Tipp im Forum diskutieren
    Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

    Neue Diskussion eröffnen

    nach obenzurück


    Anzeige

    Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
    (einschl. Beispielprojekt!)

    Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
    - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
    - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
    Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 vb@rchiv Dieter Otter
    Alle Rechte vorbehalten.
    Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel