Option Explicit' Encipher the text using the pasword.
'加密
Private Sub Cipher(ByVal password As String, ByVal from_text As String, to_text As String)
Const MIN_ASC = 32  ' Space.
Const MAX_ASC = 126 ' ~.
Const NUM_ASC = MAX_ASC - MIN_ASC + 1Dim offset As Long
Dim str_len As Integer
Dim i As Integer
Dim ch As Integer    ' Initialize the random number generator.
    offset = NumericPassword(password)
    Rnd -1
    Randomize offset    ' Encipher the string.
    str_len = Len(from_text)
    For i = 1 To str_len
        ch = Asc(Mid$(from_text, i, 1))
        If ch >= MIN_ASC And ch <= MAX_ASC Then
            ch = ch - MIN_ASC
            offset = Int((NUM_ASC + 1) * Rnd)
            ch = ((ch + offset) Mod NUM_ASC)
            ch = ch + MIN_ASC
            to_text = to_text & Chr$(ch)
        End If
    Next i
End Sub
' Encipher the text using the pasword.
'解密
Private Sub Decipher(ByVal password As String, ByVal from_text As String, to_text As String)
Const MIN_ASC = 32  ' Space.
Const MAX_ASC = 126 ' ~.
Const NUM_ASC = MAX_ASC - MIN_ASC + 1Dim offset As Long
Dim str_len As Integer
Dim i As Integer
Dim ch As Integer    ' Initialize the random number generator.
    offset = NumericPassword(password)
    Rnd -1
    Randomize offset    ' Encipher the string.
    str_len = Len(from_text)
    For i = 1 To str_len
        ch = Asc(Mid$(from_text, i, 1))
        If ch >= MIN_ASC And ch <= MAX_ASC Then
            ch = ch - MIN_ASC
            offset = Int((NUM_ASC + 1) * Rnd)
            ch = ((ch - offset) Mod NUM_ASC)
            If ch < 0 Then ch = ch + NUM_ASC
            ch = ch + MIN_ASC
            to_text = to_text & Chr$(ch)
        End If
    Next i
End Sub
' Translate a password into an offset value.
Private Function NumericPassword(ByVal password As String) As Long
Dim value As Long
Dim ch As Long
Dim shift1 As Long
Dim shift2 As Long
Dim i As Integer
Dim str_len As Integer    str_len = Len(password)
    For i = 1 To str_len
        ' Add the next letter.
        ch = Asc(Mid$(password, i, 1))
        value = value Xor (ch * 2 ^ shift1)
        value = value Xor (ch * 2 ^ shift2)        ' Change the shift offsets.
        shift1 = (shift1 + 7) Mod 19
        Debug.Print shift1
        shift2 = (shift2 + 13) Mod 23
        Debug.Print shift2
    Next i
    NumericPassword = value
End FunctionPrivate Sub cmdCipher_Click()
Dim cipher_text As String
    Cipher txtPassword.Text, txtPlain.Text, cipher_text
    txtCipher.Text = cipher_text
    txtPlain.Text = ""
End SubPrivate Sub cmdDecipher_Click()
Dim plain_text As String
Dim cipher_text As String
    Decipher txtPassword.Text, txtCipher.Text, plain_text
    txtPlain.Text = plain_text
    txtCipher.Text = ""
End SubPrivate Sub Form_Load()txtPassword.Text = Asc("c")
End SubPrivate Sub txtPassword_Change()
    If Len(txtPassword.Text) > 0 Then
        cmdCipher.Enabled = True
        cmdDecipher.Enabled = True
    Else
        cmdCipher.Enabled = False
        cmdDecipher.Enabled = False
    End If
End Sub