VB6使用密码加密文本

Sha*_*air 4 string vb6 encryption passwords

寻找简单的文本加密/解密VB6代码.理想情况下,解决方案应接受(text, password)参数并生成可读输出(没有任何特殊字符),因此可以在任何地方使用它而不会出现编码问题.

有很多可用于.NET的代码,但对于传统的VB6我找不到多少代码.到目前为止,我才发现这一点:http://www.devx.com/vb2themax/Tip/19211

wqw*_*wqw 14

我正在使用像这样的RC4实现

Option Explicit

Private Sub Command1_Click()
    Dim sSecret     As String

    sSecret = ToHexDump(CryptRC4("a message here", "password"))
    Debug.Print sSecret
    Debug.Print CryptRC4(FromHexDump(sSecret), "password")
End Sub

Public Function CryptRC4(sText As String, sKey As String) As String
    Dim baS(0 To 255) As Byte
    Dim baK(0 To 255) As Byte
    Dim bytSwap     As Byte
    Dim lI          As Long
    Dim lJ          As Long
    Dim lIdx        As Long

    For lIdx = 0 To 255
        baS(lIdx) = lIdx
        baK(lIdx) = Asc(Mid$(sKey, 1 + (lIdx Mod Len(sKey)), 1))
    Next
    For lI = 0 To 255
        lJ = (lJ + baS(lI) + baK(lI)) Mod 256
        bytSwap = baS(lI)
        baS(lI) = baS(lJ)
        baS(lJ) = bytSwap
    Next
    lI = 0
    lJ = 0
    For lIdx = 1 To Len(sText)
        lI = (lI + 1) Mod 256
        lJ = (lJ + baS(lI)) Mod 256
        bytSwap = baS(lI)
        baS(lI) = baS(lJ)
        baS(lJ) = bytSwap
        CryptRC4 = CryptRC4 & Chr$((pvCryptXor(baS((CLng(baS(lI)) + baS(lJ)) Mod 256), Asc(Mid$(sText, lIdx, 1)))))
    Next
End Function

Private Function pvCryptXor(ByVal lI As Long, ByVal lJ As Long) As Long
    If lI = lJ Then
        pvCryptXor = lJ
    Else
        pvCryptXor = lI Xor lJ
    End If
End Function

Public Function ToHexDump(sText As String) As String
    Dim lIdx            As Long

    For lIdx = 1 To Len(sText)
        ToHexDump = ToHexDump & Right$("0" & Hex(Asc(Mid(sText, lIdx, 1))), 2)
    Next
End Function

Public Function FromHexDump(sText As String) As String
    Dim lIdx            As Long

    For lIdx = 1 To Len(sText) Step 2
        FromHexDump = FromHexDump & Chr$(CLng("&H" & Mid(sText, lIdx, 2)))
    Next
End Function
Run Code Online (Sandbox Code Playgroud)

Command1 输出:

9ED5556B3F4DD5C90471C319402E
a message here
Run Code Online (Sandbox Code Playgroud)

但是,您可能需要更好的错误处理FromHexDump.

更新(2018-05-04)

对于更强大的AES 256位加密(在ECB模式下)和正确处理unicode文本/密码,您可以检查模块(~380 LOC)中实现的简单AES 256位密码保护加密mdAesEcb.bas.

  • 至少从 2014 年起,我就一直在美国使用它。在亚洲的计算机上运行时,我遇到了问题,可能与计算机上的 Unicode 设置有关,尽管我正在解密相同的 8 位字符串。解决方案是将所有“Chr$()”和“Asc()”调用替换为“ChrW()”和“AscW()”。我希望这能为您和您的客户带来一些挫败感。 (2认同)