VB6关于加密解密一例

Dim btyChrA() As Integer, btyChrB() As Integer

Friend Function MaxINT(iInt As Integer) As Integer
Dim i As Integer, i1 As Integer

For i1 = iInt To 2 Step -1
For i = 2 To iInt
If (i1 Mod i) = 0 Then Exit For
Next
If i = i1 Then MaxINT = i1: Exit For
Next

End Function

Private Function UnlockKey(RndKey() As Integer, strPassword As String, RSAKey() As Integer) As String

Dim chrUnlock As String, chrPWD As String
Dim IntMaxMod() As Integer, IntMinus() As Integer, BtyPwd() As Byte, BtyXor1() As Integer
Dim iPWDCount As Integer, i1 As Integer, i2 As Integer, i3 As Integer
Dim iRndCount As Integer, iRSACount As Integer
Static iLoop As Integer, iLoop2 As Integer

chrPWD = strPassword
iPWDCount = Len(chrPWD) - 1

ReDim BtyPwd(iPWDCount)
ReDim IntMaxMod(iPWDCount)
ReDim IntMinus(iPWDCount)

For i1 = 0 To iPWDCount
BtyPwd(i1) = AscW(Mid(chrPWD, i1 + 1, 1))
IntMaxMod(i1) = MaxINT(i1)
IntMinus(i1) = BtyPwd(i1) - IntMaxMod(i1)
Next

iRndCount = UBound(RndKey)

ReDim BtyXor1(255)
iLoop = 0
iLoop2 = 0

For i1 = 0 To 255
If iLoop > iPWDCount Then iLoop = 0
If iLoop2 > iRndCount Then iLoop2 = 0
BtyXor1(i1) = RndKey(iLoop2) Xor (BtyPwd(iLoop) + IntMaxMod(iLoop))
BtyXor1(i1) = BtyXor1(i1) Xor IntMaxMod(iLoop)
BtyXor1(i1) = BtyXor1(i1) Xor IntMinus(iLoop)
iLoop = iLoop + 1
iLoop2 = iLoop2 + 1
Next

iLoop = 0
iRSACount = UBound(RSAKey)
ReDim BtyPwd(iRSACount)

For i = 0 To 255
If iLoop > iRSACount Then iLoop = 0
BtyPwd(iLoop) = BtyXor1(i) Xor RSAKey(iLoop)
iLoop = iLoop + 1
Next

For i = 0 To iRSACount
UnlockKey = UnlockKey & ChrW(BtyPwd(i))
Next

End Function

Private Function LockKey(strUSKEY As String) As String

Dim chrUnlock As String, chrPWD As String
Dim IntMaxMod() As Integer, IntMinus() As Integer, BtyPwd() As Byte, BtyXor() As Integer, BtyXor1() As Integer
Dim iPWDCount As Integer, i1 As Integer, i2 As Integer, i3 As Integer
Dim iRndCount As Integer, iRnd1 As Integer, iRnd2 As Integer
Static iLoop As Integer, iLoop2 As Integer

chrPWD = strUSKEY
iPWDCount = Len(chrPWD) - 1

ReDim BtyPwd(iPWDCount)
ReDim IntMaxMod(iPWDCount)
ReDim IntMinus(iPWDCount)

For i1 = 0 To iPWDCount
    BtyPwd(i1) = AscW(Mid(chrPWD, i1 + 1, 1))
    IntMaxMod(i1) = MaxINT(i1)
    IntMinus(i1) = BtyPwd(i1) - IntMaxMod(i1)
Next

ReDim BtyXor(127)

VBA.Randomize
For i1 = 0 To 127
    BtyXor(i1) = Int(Rnd * 100 + 45)
Next

btyChrA = BtyXor

ReDim BtyXor1(255)
iLoop = 0
iLoop2 = 0
For i1 = 0 To 255

If iLoop > iPWDCount Then iLoop = 0
If iLoop2 > 127 Then iLoop2 = 0

BtyXor1(i1) = BtyXor(iLoop2) Xor (BtyPwd(iLoop) + IntMaxMod(iLoop))

BtyXor1(i1) = BtyXor1(i1) Xor IntMaxMod(iLoop)

BtyXor1(i1) = BtyXor1(i1) Xor IntMinus(iLoop)

iLoop = iLoop + 1
iLoop2 = iLoop2 + 1

Next
iLoop = 0
iLoop2 = 0

ReDim btyChrB(iPWDCount)

For i = 0 To 255
If iLoop > iPWDCount Then iLoop = 0
btyChrB(iLoop) = BtyXor1(i) Xor BtyPwd(iLoop)

iLoop = iLoop + 1
Next

For i = 0 To iPWDCount
LockKey = LockKey & ChrW(btyChrB(i))
Next
End Function

Private Sub Command1_Click()
Text1.Text = LockKey(txtRND.Text)
End Sub

Private Sub Command2_Click()
txtXOR.Text = UnlockKey(btyChrA(), txtRND.Text, btyChrB())
End Sub

Private Sub Form_Load()
Dim i&, strRND$
VBA.Randomize
For i = 1 To 12
strRND = strRND & ChrW(Rnd * 25 + 40)
Next
txtRND.Text = strRND
End Sub


 

posted @ 2010-08-01 10:33  涵宇  阅读(781)  评论(0)    收藏  举报