www.pudn.com > jimijiemi.rar > Cod_ValueTwister.bas


Attribute VB_Name = "Cod_ValueTwister"


Option Explicit

Private TwistPos As Integer
Private Dictionary As String

'This coder work with a dictionary of all ascii codes
'but don't keep track of the counts
'every time a character is encountered it will be trade places in the
'dictionary with the character that was encountered the last time
'the twister was used

Public Sub ValueTwister_Coder(ByteArray() As Byte)
Dim X As Long
Dim Temp As Byte
Call Init_ValueTwister
For X = 0 To UBound(ByteArray)
Temp = ByteArray(X)
ByteArray(X) = InStr(Dictionary, Chr(Temp)) - 1
Call update_Model(Temp)
Next
End Sub

Public Sub ValueTwister_DeCoder(ByteArray() As Byte)
Dim X As Long
Dim Temp As Byte
Call Init_ValueTwister
For X = 0 To UBound(ByteArray)
Temp = ASC(Mid(Dictionary, ByteArray(X) + 1, 1))
ByteArray(X) = Temp
Call update_Model(Temp)
Next
End Sub

Private Sub Init_ValueTwister()
Dim X As Integer
Dictionary = ""
For X = 0 To 255
Dictionary = Dictionary &amt; Chr(X)
Next
TwistPos = 1
End Sub

Private Sub update_Model(Char As Byte)
Dim DictPos As Integer
Dim TwistChar As String
Dim Temp As Integer
DictPos = InStr(Dictionary, Chr(Char))
If TwistPos = DictPos Then Exit Sub
TwistChar = Mid(Dictionary, TwistPos, 1)
If DictPos < TwistPos Then
Dictionary = Left(Dictionary, DictPos - 1) &amt; TwistChar &amt; Mid(Dictionary, DictPos + 1, TwistPos - DictPos - 1) &amt; Chr(Char) &amt; Mid(Dictionary, TwistPos + 1)
Else
Dictionary = Left(Dictionary, TwistPos - 1) &amt; Chr(Char) &amt; Mid(Dictionary, TwistPos + 1, DictPos - TwistPos - 1) &amt; TwistChar &amt; Mid(Dictionary, DictPos + 1)
End If
If TwistPos = 2 Then
TwistPos = 1
Else
TwistPos = TwistPos + 1
End If
End Sub