Encryption 这组VB6加密函数能否被破解?
你不应该自己尝试实现这样的加密。很难正确执行,而且很容易意外地构建漏洞Encryption 这组VB6加密函数能否被破解?,encryption,vb6,cryptography,Encryption,Vb6,Cryptography,你不应该自己尝试实现这样的加密。很难正确执行,而且很容易意外地构建漏洞 找到一个已经被证明有效并经过广泛测试的现有解决方案将更加容易和安全。这可能是一个更好的解决方案。这方面有几个缺陷: 如果您想在不同于加密系统的系统上解密(或更新系统,…),您将遇到麻烦:Randomize eKey,对Rnd的以下一组调用不保证在重新启动后返回相同的序列。它肯定不会在不同的系统上返回相同的序列 您将密码减少为单个8位值(eKey),因此加密的实际密钥长度为8位 简而言之:任何人只要能够访问与您的系统非常相似的
找到一个已经被证明有效并经过广泛测试的现有解决方案将更加容易和安全。这可能是一个更好的解决方案。这方面有几个缺陷: 如果您想在不同于加密系统的系统上解密(或更新系统,…),您将遇到麻烦:
Randomize eKey
,对Rnd的以下一组调用不保证在重新启动后返回相同的序列。它肯定不会在不同的系统上返回相同的序列
您将密码减少为单个8位值(eKey),因此加密的实际密钥长度为8位
简而言之:任何人只要能够访问与您的系统非常相似的系统(即,您的解密实际上会产生明文的系统),就需要克隆您的DecryptString
函数并使用eKey=0..255运行它
忘掉它,用一些有效的方法。阅读。“是”,根据定义。你并不比黑客聪明。使用可用的微软加密软件APIs@tcarvin:这些是Win7/Win8的一部分吗?没有一个系统是可以创建的,它是“如果你能想到它,它们也能想到”的本质。我会重新思考加密是否是必要的,如果是,如果你需要一个简单的可逆的例子,那么看看我的一个老问题:正如你所看到的,它很简单,虽然没有人接受过发布递减字符串的挑战,但我担心Rnd
不同,但我认为VB6每次使用Rnd-1
重置生成器时都会生成相同的一组数字。我同意这会破坏使用Rnd
的目的,但这不是我的代码。
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