当前位置:编程学习 > VB >>

一个vb程序读取sql 字符串的加密

请教各位大牛,这是什么加密算法。貌似眼熟,就是没见过,od跟了一下,call太多,深度太深。。。

第一行为加密后的字符。
第二行为解密后的字符。


ECX 00A91FF4 UNICODE "86@86@80@82@82@82@83@8B@85@86@83@82@80@81@85@84@87@84"
EAX 0933B1D4 UNICODE "442000197410237656" 本帖最后由 bcrun 于 2013-12-11 10:58:05 编辑 哇!!大神,高高手,您能说一下方法吗?我是学delphi的,他原来的程序是vb的,界面很繁琐,我是想改成delphi单界面的!谢谢谢谢 0BEA@04A2@78A8@09D4@64D4@00B5@09D4@01CE@75F1@09A1@03D6@73E2@76C6@70BE@83@84@00F4@87@82@83@05B6   那这些加密汉字,也可以用这个算法来解密了吧?
引用 1 楼 sjvfhp 的回复:
Private Sub Command1_Click()
    Dim i As Integer
    Dim l As Integer
    Dim 密匙 As String
    Dim 加密串() As String
    解密串 = ""
    加密串 = Split("86@86@80@82@82@82@83@8B@85@86@83@82@80@81@85@84@87@84", "@")
    密匙 = "23016745AB"
    For i = 0 To UBound(加密串)
        For l = 1 To 10
            If Right(加密串(i), 1) = Mid(密匙, l, 1) Then
                解密串 = 解密串 & l - 1
            End If
        Next
    Next
    MsgBox 解密串
'    解密串 = "442000197410237656"
End Sub
 


大神,还在不? 算法可以改进,只需 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
还可以不使用密钥(注意到这是一个简单的互换加密)。另外,数字的十位 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
引用 3 楼 pc248 的回复:
0BEA@04A2@78A8@09D4@64D4@00B5@09D4@01CE@75F1@09A1@03D6@73E2@76C6@70BE@83@84@00F4@87@82@83@05B6   那这些加密汉字,也可以用这个算法来解密了吧?

汉字也用这种算法来加密/解密,那编程序的基本可以累得半死了。


1F 的代码, End If 之前应该加上一句 Exit for 。
这样可以减少不必要的循环。
引用 3 楼 pc248 的回复:
0BEA@04A2@78A8@09D4@64D4@00B5@09D4@01CE@75F1@09A1@03D6@73E2@76C6@70BE@83@84@00F4@87@82@83@05B6   那这些加密汉字,也可以用这个算法来解密了吧?


楼主可以将明文汉字的 ASCII 码与密文对比一下,应该很容易找到相互关系。 哇哇,谢谢谢谢各位大神!!!小弟感激不尽。msdn 牛人多!!!
引用 9 楼 pc248 的回复:
哇哇,谢谢谢谢各位大神!!!小弟感激不尽。msdn 牛人多!!!

MSDN ?
你搞错对象了吧……
此加密无密钥.
汉字的加密应该也是采用相近的算法进行的。
如果能给出相应的明暗文,应该能找到算法。
以下是加密的算法。



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 楼 Chen8013 的回复:
Quote: 引用 9 楼 pc248 的回复:

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

MSDN ?
你搞错对象了吧……



哈哈,激动了,应该是CSDN。。。


多谢大牛指点,现在给出明文和密文。。。这个算法适合汉字不? 这个是一个我们学校的成查询程序,是好几年前vb写的,程序很庞大,我想用delphi 重新对接一个。

密文 : 65A6@08E3@66AA
明文:  庄宏裕  

对应的

ASCII :  D7AF  BAEA   D4A3
UNIC:  845E    5F5B    D588



引用 11 楼 fvflove 的回复:
此加密无密钥.
汉字的加密应该也是采用相近的算法进行的。
如果能给出相应的明暗文,应该能找到算法。
以下是加密的算法。



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
引用 13 楼 pc248 的回复:
多谢大牛指点,现在给出明文和密文。。。这个算法适合汉字不? 这个是一个我们学校的成查询程序,是好几年前vb写的,程序很庞大,我想用delphi 重新对接一个。

密文 : 65A6@08E3@66AA
明文:  庄宏裕  

对应的

ASCII :  D7AF  BAEA   D4A3
UNIC:  845E    5F5B    D588



Quote: 引用 11 楼 fvflove 的回复:

此加密无密钥.
汉字的加密应该也是采用相近的算法进行的。
如果能给出相应的明暗文,应该能找到算法。
以下是加密的算法。



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


你能不能多给出一点,有点眉目了,要再次确认一下.
引用 14 楼 fvflove 的回复:
Quote: 引用 13 楼 pc248 的回复:




多谢大牛指点,现在给出明文和密文。。。这个算法适合汉字不? 这个是一个我们学校的成查询程序,是好几年前vb写的,程序很庞大,我想用delphi 重新对接一个。

密文 : 65A6@08E3@66AA
明文:  庄宏裕  

对应的

ASCII :  D7AF  BAEA   D4A3
UNIC:  845E    5F5B    D588



Quote: 引用 11 楼 fvflove 的回复:

此加密无密钥.
汉字的加密应该也是采用相近的算法进行的。
如果能给出相应的明暗文,应该能找到算法。
以下是加密的算法。



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


你能不能多给出一点,有点眉目了,要再次确认一下.



好好好!!谢谢大神

0BEA@64D4@78D9@08AA@64E0@75F1@76C6@06EC@70BE@80@82@08CC@83@04B9@64A7@60B2@87@82@81@05B6
广州市海珠区南村路20号1栋之一503房
引用 15 楼 pc248 的回复:
Quote: 引用 14 楼 fvflove 的回复:

Quote: 引用 13 楼 pc248 的回复:




多谢大牛指点,现在给出明文和密文。。。这个算法适合汉字不? 这个是一个我们学校的成查询程序,是好几年前vb写的,程序很庞大,我想用delphi 重新对接一个。

密文 : 65A6@08E3@66AA
明文:  庄宏裕  

对应的

ASCII :  D7AF  BAEA   D4A3
UNIC:  845E    5F5B    D588



Quote: 引用 11 楼 fvflove 的回复:

此加密无密钥.
汉字的加密应该也是采用相近的算法进行的。
如果能给出相应的明暗文,应该能找到算法。
以下是加密的算法。



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


你能不能多给出一点,有点眉目了,要再次确认一下.



好好好!!谢谢大神

0BEA@64D4@78D9@08AA@64E0@75F1@76C6@06EC@70BE@80@82@08CC@83@04B9@64A7@60B2@87@82@81@05B6
广州市海珠区南村路20号1栋之一503房


算法已确定,现在下班了,回家后给上弄上解密算法.


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
引用 17 楼 fvflove 的回复:


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



哇,大神!thankyou!! 你qq多少,如何感谢! 楼上那位美女,不错啊……
大侠也很厉害了!!膜拜 嗯,这个真不错。

看来,加解密算法和实际使用计算机算法还是不同的,大有讲究。

不过,还是要劝楼主一句,这种老式的加密算法还是不要用了,很容易被破解。

二战之前,主要流行的是传统加密算法,主要是移位和替换,但大多数实际使用的密钥普遍是移位和替换混合使用了。但即便如此,还是有很多国家的军用密码被破译,著名的有德国恩尼格玛密码机被英国破解,日本外交和海军密码被美国破解,均导致军事上大的失败。

战后,密码学迎来了巨大的技术进步。现代密码,普遍采用数学中的有限域理论,采用更加复杂的算法。要破解这些密码,即使有明文和密文,也需要有高深的密码学知识和超级计算机的支持。

而楼主给出的这个密码,仅仅是简单的替换。基本上是公元前的凯撒密码的变种。
引用 22 楼 of123 的回复:
不过,还是要劝楼主一句,这种老式的加密算法还是不要用了,很容易被破解。

二战之前,主要流行的是传统加密算法,主要是移位和替换,但大多数实际使用的密钥普遍是移位和替换混合使用了。但即便如此,还是有很多国家的军用密码被破译,著名的有德国恩尼格玛密码机被英国破解,日本外交和海军密码被美国破解,均导致军事上大的失败。

战后,密码学迎来了巨大的技术进步。现代密码,普遍采用数学中的有限域理论,采用更加复杂的算法。要破解这些密码,即使有明文和密文,也需要有高深的密码学知识和超级计算机的支持。

而楼主给出的这个密码,仅仅是简单的替换。基本上是公元前的凯撒密码的变种。
学习了,谢谢!
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,