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原理:采用十进制逆进制方法将当前数据转换为十进制数据,然后逐位左移,再然后转换为ASCII码. 再进行正序转换.
'加密
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原理:采用十进制逆进制方法将当前数据转换为十进制数据,然后逐位左移,再然后转换为ASCII码.
再进行正序转换.