本帖最后由 bcrun 于 2013-12-11 10:58:05 编辑

解决方案 »

  1.   

    哇!!大神,高高手,您能说一下方法吗?我是学delphi的,他原来的程序是vb的,界面很繁琐,我是想改成delphi单界面的!谢谢谢谢
      

  2.   

    0BEA@04A2@78A8@09D4@64D4@00B5@09D4@01CE@75F1@09A1@03D6@73E2@76C6@70BE@83@84@00F4@87@82@83@05B6   那这些加密汉字,也可以用这个算法来解密了吧?
      

  3.   

    算法可以改进,只需 1 个循环:Private Sub Command1_Click()
        Dim i As Integer
        Dim l As Integer
        Dim key As String
        Dim cipher() As String, plain As String
        plain = ""
        cipher = Split("86@86@80@82@82@82@83@8B@85@86@83@82@80@81@85@84@87@84", "@")
    '    key = "23016745AB"
    '    For i = 0 To UBound(cipher)
    '        For l = 1 To 10
    '            If Right(cipher(i), 1) = Mid(key, l, 1) Then
    '                plain = plain & l - 1
    '            End If
    '        Next
    '    Next
        key = "23016745  89"
        For i = 0 To UBound(cipher)
            plain = plain & Mid(key, Val("&H" & Right(cipher(i), 1)) + 1, 1)
        Next i
        MsgBox plain
    '    plain = "442000197410237656"
    End Sub
      

  4.   

    还可以不使用密钥(注意到这是一个简单的互换加密)。另外,数字的十位 8 以及所有的 @ 都是冗余的,解密前可以去掉。
    Private Sub Command1_Click()
        Dim i As Integer
        Dim cipher As String, plain As String, strTmp As String
        plain = ""
        cipher = Mid(Replace("86@86@80@82@82@82@83@8B@85@86@83@82@80@81@85@84@87@84", "@8", ""), 2)
        For i = 1 To Len(cipher)
            strTmp = Mid(cipher, i, 1)
            Select Case strTmp
                Case "2", "3", "6", "7", "A", "B"
                    plain = plain & Val("&H" & strTmp) - 2
                Case "0", "1", "4", "5"
                    plain = plain & Val(strTmp) + 2
            End Select
        Next i
        MsgBox plain
    '    plain = "442000197410237656"
    End Sub
      

  5.   

    汉字也用这种算法来加密/解密,那编程序的基本可以累得半死了。
    1F 的代码, End If 之前应该加上一句 Exit for 。
    这样可以减少不必要的循环。
      

  6.   


    楼主可以将明文汉字的 ASCII 码与密文对比一下,应该很容易找到相互关系。
      

  7.   

    哇哇,谢谢谢谢各位大神!!!小弟感激不尽。msdn 牛人多!!!
      

  8.   

    MSDN ?
    你搞错对象了吧……
      

  9.   

    此加密无密钥.
    汉字的加密应该也是采用相近的算法进行的。
    如果能给出相应的明暗文,应该能找到算法。
    以下是加密的算法。Private Sub Command1_Click()
      Dim Cipher() As String
      Dim Plain As String
      Dim i As Integer
      Cipher = Split("86@86@80@82@82@82@83@8B@85@86@83@82@80@81@85@84@87@84", "@")
      For i = 0 To UBound(Cipher)
        Plain = Plain & GetNumber("&H" & Cipher(i))
      Next
      MsgBox Plain
    End Sub
    Private Function GetNumber(ByVal Num As Long) As String
       Num = Num - &H50
       GetNumber = Chr(((Num Mod 4) + 2) Mod 4 + Int(Num / 4) * 4)
    End Function
      

  10.   

    MSDN ?
    你搞错对象了吧……

    哈哈,激动了,应该是CSDN
      

  11.   


    多谢大牛指点,现在给出明文和密文这个算法适合汉字不? 这个是一个我们学校的成查询程序,是好几年前vb写的,程序很庞大,我想用delphi 重新对接一个。密文 : 65A6@08E3@66AA
    明文:  庄宏裕  对应的ASCII :  D7AF  BAEA   D4A3
    UNIC:  845E    5F5B    D588
      

  12.   


    你能不能多给出一点,有点眉目了,要再次确认一下.
    好好好!!谢谢大神0BEA@64D4@78D9@08AA@64E0@75F1@76C6@06EC@70BE@80@82@08CC@83@04B9@64A7@60B2@87@82@81@05B6
    广州市海珠区南村路20号1栋之一503房
      

  13.   


    你能不能多给出一点,有点眉目了,要再次确认一下.
    好好好!!谢谢大神0BEA@64D4@78D9@08AA@64E0@75F1@76C6@06EC@70BE@80@82@08CC@83@04B9@64A7@60B2@87@82@81@05B6
    广州市海珠区南村路20号1栋之一503房算法已确定,现在下班了,回家后给上弄上解密算法.
      

  14.   

    Private Sub Command1_Click()
      Dim Cipher() As String
      Dim Plain As String
      Dim i As Integer
      Cipher = Split("0BEA@64D4@78D9@08AA@64E0@75F1@76C6@06EC@70BE@80@82@08CC@83@04B9@64A7@60B2@87@82@81@05B6", "@")
      For i = 0 To UBound(Cipher)
        Plain = Plain & GetNumber("&H" & Cipher(i))
      Next
      MsgBox Plain
    End Sub
    Private Function GetNumber(ByVal Num As Long) As String
        If Num < 256 Then
           GetNumber = Chr(Num Xor &HB2)
        Else
           GetNumber = Chr(Num Xor &HB209)
        End If
    End Function
      

  15.   

    哇,大神!thankyou!! 你qq多少,如何感谢!