求vb中的加密函数及其算法

解决方案 »

  1.   

    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码.
    再进行正序转换.