注册 登录
编程论坛 VB6论坛

VB6 加密与解密

seafish011 发布于 2013-03-21 20:43, 2032 次点击
最近在学习加密与解密,突然在网上看到这几段代码,我把text1的值代入到Hash函数中运行得到aH值,但是我不知道该怎样把aH的值还原为text1原来的值。
不知道有没有大手可以帮下忙指点下或者解释下。代码如下:
程序代码:
Private Sub Command1_Click()
    Dim aH
    aH = Hash(CStr(Text1.Text))
    Debug.Print aH
End Sub

Public Function Hash(ET As String) As String
    Dim BitLenString As String, KeyString As String, FileText As String
    BitLenString = "12345678"
    KeyString = ET & BitLenString
    Call Initialize(KeyString)
    '根据KeyString产生随机数序列
    FileText = ET & BitLenString
    Call DoXor(FileText)
    '根据上述随机数序列对FileText加密
    KeyString = FileText
    Call Initialize(KeyString)
    '根据上述的加密结果产生新的随机数序列
    FileText = BitLenString
    Call DoXor(FileText)
    '根据上述随机数序列对FileText加密,8位字符
    Hash = FileText
    '8位字符送作HASH值
End Function

Public Sub DoXor(ByRef msFileText As String)
    Dim intC As Integer
    Dim intB As Integer
    Dim lngI As Long
    '下面,用Rnd产生随机序列数,然后根据Int(Rnd * 2 ^ 7)得到一个对应整数,
    '再用该整数与msFileText中字符XOR.
    For lngI = 1 To Len(msFileText)
        intC = AscW(Mid(msFileText, lngI, 1))
        intB = Int(Rnd * 2 ^ 7)
        '选用< =127可正确处理汉字,ChrW(n):n 有一个范围
        Mid(msFileText, lngI, 1) = ChrW(intC Xor intB)
    Next lngI
End Sub

Private Sub Initialize(vKeyString As String)
    Dim intI As Integer, intJ As Integer
    Randomize Rnd(-1)  '得到初始值(种子值)
    '每次调用初始值均相同
    '根据初始值(种子值)得到随机数序列,每次调用Initialize时,初始值均相同。只要vKeyString相同,所产生的随机数序列一定相同
    For intI = 1 To Len(vKeyString)
        intJ = Rnd(-Rnd * AscW(Mid(vKeyString, intI, 1)))
        Randomize intJ
    Next intI
End Sub
7 回复
#2
mrye2013-03-22 00:27
TEXT的值先存储起来
#3
seafish0112013-03-22 02:04
以下是引用mrye在2013-3-22 00:27:17的发言:

TEXT的值先存储起来

我想要的是一个aH还原为text1的逆向过程,如果能实现的话,那这些代码可以作为一个加密与解密来用。
#4
seafish0112013-03-22 17:26
有人可以给些意见么?
#5
seafish0112013-03-24 06:15
到结贴时间了,还是没人给出意见.
#6
wp2319572013-03-24 06:52
不懂啊  你可以先研究一下 国际上著名的加密算法   

有些是单程  就是无法还原的  
有些可以根据加密后的结果反推回最初的
#7
lowxiong2013-03-24 09:42
你提供的这个算法是不可逆的。该算法用提供的文本两次计算随机数系列,不同的字符得到的随机数系列不同,最后用随机数系列和固定的“12345678”字符异或得到密匙,用随机数时实际上就丢弃了原始文本,不过vb产生随机数也是有规律的,比如你每次第一次rnd的数字都一样,因此相同文本可得到相同随机数系列,从一定程度上可逆,但最后一步就彻底丢掉原始文本信息了,因此不可逆。
#8
风吹过b2013-03-24 13:46
Hash函数   一般情况下是不可逆的,MD5 也属于这种不可逆的。
1