VB6 使用密码加密文本 [英] VB6 encrypt text using password
问题描述
寻找一个简单的文本加密/解密 VB6 代码.理想情况下,解决方案应该接受 (text, password)
参数并产生可读的输出(没有任何特殊字符),因此它可以在任何地方使用而不会出现编码问题.
Looking for a simple text encryption/decryption VB6 code. Ideally, the solution should accept (text, password)
arguments and produce readable output (without any special characters), so it can be used anywhere without encoding issues.
有很多可用于 .NET 的代码,但对于旧版 VB6,我能找到的代码并不多.到目前为止我只找到了这个:http://www.devx.com/vb2themax/Tip/19211
There are lots of code available for .NET, but not really much I can find for legacy VB6. Only this I've found so far: http://www.devx.com/vb2themax/Tip/19211
推荐答案
我正在使用这样的 RC4 实现
I'm using RC4 implementation like this
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
Command1
输出:
9ED5556B3F4DD5C90471C319402E
a message here
不过,您可能需要对 FromHexDump
进行更好的错误处理.
You might need better error handling on FromHexDump
though.
要获得更强大的 AES 256 位加密(在 ECB 模式下)和正确处理 unicode 文本/密码,您可以查看 在 mdAesEcb.bas
模块中实现的简单 AES 256 位密码保护加密(~380 行).
For much stronger AES 256-bit encryption (in ECB mode) and proper handling of unicode texts/passwords you can check out Simple AES 256-bit password protected encryption as implemented in mdAesEcb.bas
module (~380 LOC).
这篇关于VB6 使用密码加密文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!