Option ExplicitPrivate Sub Cmd_Decrypt_Click()
    '单击解密按钮
    Txt_PText.Text = Encrypt(Txt_CText.Text)
End SubPrivate Sub Cmd_Encrypt_Click()
    '单击加密按钮
    Txt_CText.Text = Encrypt(Txt_PText.Text)
End SubPrivate Function Encrypt(ByVal Text As String) As String
    '加密/解密函数
    '加密时参数为源字符串,返回值为加密字符串
    '解密时参数为加密字符串,返回值为源字符串
    Dim i As Integer, t As Integer, n As Integer
    Dim Lenth As Integer
     '初始化当前位置为第一位
    t = 1
    '置结果为空
    Encrypt = ""
    '取得字符串长度
    Lenth = Len(Text)
    '当长度为奇数时跳出
    If Lenth Mod 2 = 1 Then Exit Function
    '进行退一进三操作
    '每循环一次按顺序取得一个加密字符串中的字符
    't为该字符在源字符串中的位置
    For i = 1 To Lenth
        'n为标志
        n = 1 - n
        '这一句实际上是"t = t + n * (-1) + (1 - n) * 3"
        '即n=0的时候退三,n=1的时候进五
        t = t - n * 2 + 5
        '以下两句确定循环操作
        If t = 0 Then t = Lenth
        If t > Lenth Then t = t - Lenth
        '加入到结果中
        Encrypt = Encrypt & Mid(Text, t, 1)
    Next i
End Function说明:这是个退3进5的加密解密程序,哪位哥哥或姐姐帮我看看,给个正确的程序我!谢谢了

解决方案 »

  1.   

    '这一句实际上是"t = t + n * (-1) + (1 - n) * 3"
    '即n=0的时候退三,n=1的时候进五
    t = t - n * 2 + 5这里都对不上……退三进五具体算法是什么?
      

  2.   

    对不起,我打错了!
    我改了下:t = t + n * (-3) + (1 - n) * 5即:t = t - n * 8 + 5
    算法说明:加密:如果原码是:123456,加密后应该是:436521。
              解密:如果密码是:436521,解密后应该是:123456。
      加密过程:从第一位开始,这里是“1”,退3位就是“4”,再从“4”开始进5位就到“3”……
    谢谢上面回复人,我试着送分
      

  3.   

    需要改的地方:    For i = 1 To Lenth
            '这一句实际上是"t = t + n * (-1) + (1 - n) * 3"
            '即n=0的时候退三,n=1的时候进五
             t = t - n * 8 + 5
            'n为标志
            n = 1 - n
            '以下两句确定循环操作
            If t <= 0 Then t = Lenth + t
    加密 123456
    得到 632541
    再解密可以还原~
      

  4.   

    首先谢谢 AprilSong(X),qyii(向范敬宜同志学习!) ,apple_boy(传说中的剑客)对我的问题的关注。
    1。123456通过退3进5算法的加密应该得到436521,如果得到632541,则算法不成功
    2。对算法功能说明:加密的理解过程:把要加密的数据写圆圈形状(为了便于理解循环),顺时钟方向是进,逆时钟方向是退,以加密1234567890为例,从第一位"1"开始,退3位是"8",再从"8"开始,进5位是"3",再从"3"开始退3位是"0",再从"0"开始进五位是"5",如此循环,直到所有的数据都经过到(注:这个算法一定可以经过所有的偶数个数据)最后点击加密得到的密码是:8305274961
                解密过程应该是加密的逆过程,即对8305274961解密应该得到1234567890
    3。我在最上面的算法得不到正确的结果,所以拜托你们来帮我。谢谢了,在线等
      

  5.   

    1.加密
    Private Function Encrypt(ByVal Text As String) As String
        Dim i As Integer, n As Integer
        Dim Lenth As Integer
        '置结果为空
        Encrypt = ""
        '取得字符串长度
        Lenth = Len(Text)
        If Lenth Mod 2 = 1 Then Exit Function
        n = 0 '首先退3
        '记录当前的位置
        Dim intCurX As Integer
        intCurX = 1
        For i = 1 To Lenth
            If n = 0 Then  '退3
                intCurX = intCurX - 3
                If intCurX < 0 Then intCurX = intCurX + Lenth
            Else           '进5
                intCurX = intCurX + 5
                If intCurX > Lenth Then intCurX = intCurX - Lenth
            End If
            If intCurX = 0 Then intCurX = Lenth
            n = 1 - n
            Encrypt = Encrypt & Mid(Text, intCurX, 1)
        Next
    End Function2.解密
    Private Function Decrypt(ByVal Text As String) As String
        Dim i As Integer, n As Integer
        Dim Lenth As Integer
        '置结果为空
        Decrypt = ""
        '取得字符串长度
        Lenth = Len(Text)
        If Lenth Mod 2 = 1 Then Exit Function
        Decrypt = Mid(Text, Lenth, 1)
        n = 1 '首先进5
        Dim intCurX As Integer
        intCurX = Lenth
        For i = 1 To Lenth - 1
            If n = 0 Then  '退3
                intCurX = intCurX - 3
                If intCurX < 0 Then intCurX = intCurX + Lenth
            Else           '进5
                intCurX = intCurX + 5
                If intCurX > Lenth Then intCurX = intCurX - Lenth
            End If
            If intCurX = 0 Then intCurX = Lenth
            n = 1 - n
            Decrypt = Decrypt & Mid(Text, intCurX, 1)
        Next
        
    End Function