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