[VB.net][VB6][VBA]「動態密碼」和「沒有輸入欄位框」的密碼輸入技巧

[VB.net][VB6][VBA]「動態密碼」和「不用輸入欄位」的密碼輸入技巧

刻板模式

在需要輸入密碼的場合常見到介面上會有一個類似「管理人登入」的按鈕,按下後再彈出一個「密碼輸入文字框」,輸入時再用「*」或「●」顯示已輸入的字元,如果輸入錯誤時再彈出「密碼不正確」的訊息,好像大多都是如此…

 

來個另類思考吧

這個另類方式可以完全隠匿輸入密碼的 UI,讓輸入動作可用悄悄話進行,在人前可以堂而皇之即便是被看到全部輸入過程也無妨。
下面的程式用當下的時間和字串 12345 組成一組動態密碼,至於如何演算產生目的密碼則完全隨意。輸入時先用眼角餘光瞄一下右下角的時間,稍加轉換算出當時的密碼然後直接輸入就行了。

 


Imports Microsoft.VisualBasic
Public Class Form1
    Const def_Password = "12345"
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        KeyPreview = True
        Button1.Visible = False
    End Sub
    Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        '---用靜態變數存放 User 已輸入的字串---
        Static pwd As String = ""
        '---將當下時間納入為密碼的一部分---
        Dim p1 = Format(Now, "mmhh") & def_Password
        '---每次 KeyPress 事件發生時都進行比對---
        Dim L = Len(p1)
        For i = 1 To L
            If pwd = Microsoft.VisualBasic.Left(p1, L - i) Then
                If e.KeyChar = Mid(p1, L + 1 - i, 1) Then
                    '---若字元正確就納入暫存變數---
                    pwd = Microsoft.VisualBasic.Left(p1, L + 1 - i)
                Else
                    '---輸入過程中有任一字元不正確就全部重來---
                    pwd = ""
                End If
            End If
        Next
        '---完全輸入正確時---
        If pwd = p1 Then
            MsgBox("歡迎管理人大駕光臨...")
            Button1.Visible = True
            pwd = ""
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        sender.Visible = False
    End Sub
End Class

 

 

 

參考附圖:

這個 demo 的動態密碼是用當下時間的「」和「」及「12345」 組成,例如時間是 10:05 那密碼就是「051012345」。

image image

image

專案包下載:無欄位輸入密碼.rar


ku3