Tipp 0184 Sichere unsichtbare Texteingabe
Autor/Einsender:
Datum:
  Dieter Otter
31.12.2001
Entwicklungsumgebung:   VB 6
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 PasswordChar-Eigenschaft verwenden, so dass z.B. lauter kleine Sternchen angezeigt werden".
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 heißt).
Wie kann man sich und damit seine Anwender nun gegen solche "Spionage"-Programme schützen?
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.
 
Option Explicit

Private Sub Form_Load()
  Combo1.AddItem "* (Sternchen)"
  Combo1.AddItem "# (Raute)"
  Combo1.AddItem " (Leerzeichen)"
  Combo1.ListIndex = 0
End Sub

Private Sub Combo1_Click()
  Combo1.Tag = Left$(Combo1.Text, 1)
  Text1.Text = String$(Len(Text1.Text), Combo1.Tag)
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
  Dim sText As String
  Dim lPos As Long
  Dim lLen As Long

  sText = Text1.Tag
  lPos = Text1.SelStart
  lLen = Text1.SelLength

  Select Case KeyAscii
    Case 8
      If lLen > 0 Then
        sText = Left$(sText, lPos) + _
          Mid$(sText, lPos + lLen + 1)
      Else
        If lPos > 0 Then
          sText = Left$(sText, lPos - 1) + _
            Mid$(sText, lPos + 1)
        End If
      End If

    Case Is > 31
      sText = Left$(sText, lPos) + Chr$(KeyAscii) + _
        Mid$(sText, lPos + lLen + 1)
      KeyAscii = Asc(Combo1.Tag)
  End Select

  Text1.Tag = sText
  Label4.Caption = Text1.Tag
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
  Dim sText As String
  Dim lPos As Long
  Dim lLen As Long

  sText = Text1.Tag
  lPos = Text1.SelStart
  lLen = Text1.SelLength

  Select Case KeyCode
    Case vbKeyDelete
      If lLen > 0 Then
        sText = Left$(sText, lPos) + _
          Mid$(sText, lPos + lLen + 1)
      Else
        If lPos > 0 Then
          sText = Left$(sText, lPos) + _
            Mid$(sText, lPos + 2)
        End If
      End If

    Case 86
      If Shift = 2 Then
        Clipboard.Clear
      End If
  End Select

  Text1.Tag = sText
  Label4.Caption = Text1.Tag
End Sub
 
Weitere Links zum Thema
Texte verschlüsseln

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (10 kB) Downloads bisher: [ 980 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Freitag, 30. September 2011