首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这组VB6加密函数能被破解吗?

这组VB6加密函数能被破解吗?
EN

Stack Overflow用户
提问于 2012-05-24 10:59:35
回答 2查看 1.2K关注 0票数 2
代码语言:javascript
复制
 Public Function EncryptString(theString As String, TheKey As String) As String
    Dim X As Long
    Dim eKey As Byte, eChr As Byte, oChr As Byte, tmp$
    For i = 1 To Len(TheKey)
         'generate a key
          eKey = Asc(Mid$(TheKey, i, 1)) Xor eKey
    Next

    'reset random function
    Rnd -1
    'initilize our key as the random seed
    Randomize eKey
    'generate a pseudo old char
    oChr = Int(Rnd * 256)
    'start encryption
    For X = 1 To Len(theString)
        pp = pp + 1
        If pp > Len(TheKey) Then pp = 1
        eChr = Asc(Mid$(theString, X, 1)) Xor _
                   Int(Rnd * 256) Xor Asc(Mid$(TheKey, pp, 1)) Xor oChr
        tmp$ = tmp$ & Chr(eChr)
        oChr = eChr
    Next
    EncryptString = AsctoHex(tmp$)    

End Function


Public Function DecryptString(theString As String, TheKey As String) As String

Dim X As Long
Dim eKey As Byte, eChr As Byte, oChr As Byte, tmp$
For i = 1 To Len(TheKey)
     'generate a key
     eKey = Asc(Mid$(TheKey, i, 1)) Xor eKey
Next
'reset random function
Rnd -1
'initilize our key as the random seed
Randomize eKey
'generate a pseudo old char
oChr = Int(Rnd * 256)
'start decryption
tmp$ = HexToAsc(theString)
    DecryptString = ""
    For X = 1 To Len(tmp$)
    pp = pp + 1
    If pp > Len(TheKey) Then pp = 1
    If X > 1 Then oChr = Asc(Mid$(tmp$, X - 1, 1))
    eChr = Asc(Mid$(tmp$, X, 1)) Xor Int(Rnd * 256) Xor _
           Asc(Mid$(TheKey, pp, 1)) Xor oChr
        DecryptString = DecryptString & Chr$(eChr)
Next

End Function


Private Function AsctoHex(ByVal astr As String)

For X = 1 To Len(astr)
hc = Hex$(Asc(Mid$(astr, X, 1)))
nstr = nstr & String(2 - Len(hc), "0") & hc
Next
AsctoHex = nstr

End Function
EN

回答 2

Stack Overflow用户

发布于 2012-05-24 11:12:13

您不应该尝试自己实现这样的加密。这是很难做到正确的,并且很容易意外地构建漏洞。

找到一个已被证明有效且经过大量测试的现有解决方案会更容易、更安全。This可能是一个更好的解决方案。

票数 6
EN

Stack Overflow用户

发布于 2012-05-24 11:13:13

这里面有几个缺陷:

如果你想在不同的系统上解密,而不是在加密的系统上解密(或者如果你更新你的系统,...),你会遇到麻烦:使用以下一组对Rnd的调用的Randomize eKey不能保证在重启后返回相同的序列。它绝对不会在不同的系统上返回相同的序列。

您将密码减少为一个8位值(eKey),因此您的加密具有8位的实际密钥长度。

简而言之:任何人只要克隆你的DecryptString函数并用eKey=0..255运行它,就可以访问与你的系统足够相似的系统(即你的解密实际上会产生明文的系统)。

忘了它,使用一些有效的东西。阅读.

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10730548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档