⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 global.bas

📁 21加密算法,用vB语言编写实现,可了解各种加密算法的结构
💻 BAS
📖 第 1 页 / 共 3 页
字号:
Attribute VB_Name = "Global"


Public Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, source As Any, ByVal Length As Long)

Public RGBColor(6) As ColorConstants    'color codes for graphics
Public OriginalArray() As Byte          'array to store the original
Public OriginalSize As Long             'size of the original file
Public WorkArray() As Byte              'array to store the results
Public LoadFileName As String           'which file is loeded
Public JustLoaded As Boolean            'to see if the original file is just loaded
Public DictionarySize As Integer        'for use with LZW and LZSS compressors
Public LastCoder As Integer             'wich coder is used last
Public UsedCodecs() As Integer          'to store the codecs used
Public LastDeCoded As Boolean           'to see what has happen lately
Public AritmaticRescale As Boolean      'to set rescale on
Public CompDecomp As Integer            'result from compress or decompress screen
Public ParingType As Byte               'Byte used to determen the type of paring

'constants for the coder types
Public Const Coder_Differantiator = 1
Public Const Coder_FrequentieShifter = 2
Public Const Coder_BWT = 3
Public Const Coder_Fix128 = 4
Public Const Coder_Flatter64 = 5
Public Const Coder_MTF_No_Header = 6
Public Const Coder_MTF_With_Header = 7
Public Const Coder_SortSwap = 8
Public Const Coder_Used_To_Front = 9
Public Const Coder_ValueDownShift = 10
Public Const Coder_ValueUpShift = 11
Public Const Coder_ValueTwister = 12
Public Const Coder_Fix128B = 13
Public Const Coder_Seperator = 14
Public Const Coder_Flatter16 = 15
Public Const Coder_Base64 = 16
Public Const Coder_Numerator = 17
Public Const Coder_Numerator2 = 18
Public Const Coder_AddDifferantiator = 19
Public Const Coder_Scrambler = 20
Public Const Coder_BWT2 = 21
Public Const Coder_BWT_noRecursion = 22

Private CodName(22) As String

'constants for the compressor types
Public Const Compressor_HuffmanCodes = 1
Public Const Compressor_Grouping64 = 2
Public Const Compressor_SmartGrouping = 3
Public Const Compressor_VBC1 = 4
Public Const Compressor_VBC2 = 5
Public Const Compressor_VBCR = 6
Public Const Compressor_LZW_Dynamic = 7
Public Const Compressor_LZW_Static = 8
Public Const Compressor_HuffmanShortDict = 9
Public Const Compressor_Eliminator = 10
Public Const Compressor_Combiner2Bytes = 11
Public Const Compressor_Combiner3Bytes = 12
Public Const Compressor_CombinerVariable = 13
Public Const Compressor_Word1 = 14
Public Const Compressor_Word2 = 15
Public Const Compressor_EliasGamma = 16
Public Const Compressor_EliasDelta = 17
Public Const Compressor_Fibonacci = 18
Public Const Compressor_LZW_Predefined = 19
Public Const Compressor_LZW_Multidict1Stream = 20
Public Const Compressor_LZW_LZSS = 21
Public Const Compressor_LZW_Multidict4Streams = 22
Public Const Compressor_Reducer_Static = 23
Public Const Compressor_Reducer_Dynamic = 24
Public Const Compressor_Reducer_Preselect1 = 25
Public Const Compressor_Reducer_Preselect2 = 26
Public Const Compressor_Reducer_Preselect3 = 27
Public Const Compressor_Reducer_withHuffcodes = 28
Public Const Compressor_Reducer_HalfDictwithHuffcodes = 29
Public Const Compressor_Reducer_Dict16withHuffcodes = 30
Public Const Compressor_RLE4isRun = 31
Public Const Compressor_RLEVar = 32
Public Const Compressor_RLEVarLoop = 33
Public Const Compressor_LZSS = 34
Public Const Compressor_SmartGrouping4Streams = 35
Public Const Compressor_HuffmanShort16Chars = 36
Public Const Compressor_Arithmetic = 37
Public Const Compressor_LBE_Flat = 38
Public Const Compressor_LBE_3D = 39
Public Const Compressor_LBE_3D_2 = 40
Public Const Compressor_Arithmetic_DMC = 41
Public Const Compressor_Eliminator_Loop = 42
Public Const Compressor_Arithmetic_Dynamic = 43
Public Const Compressor_Reducer_Dynamic_Golomb = 44
Public Const Compressor_Reducer_Dynamic_Elias_Gamma = 45
Public Const Compressor_Arithmetic_Dynamic_With_Dict = 46
Public Const Compressor_Arithmetic_Dynamic_With_Dict_Rescale = 47
Public Const Compressor_Arithmetic_DMC_Rescale = 48
Public Const Compressor_Orderer = 49
Public Const Compressor_VBC_Dynamic = 50
Public Const Compressor_VBC_Dynamic2 = 51
Public Const Compressor_Stripper = 52
Public Const Compressor_Huffman_Dynamic = 53
Public Const Compressor_Pairing = 54
Public Const Compressor_Pairing128 = 55
Public Const Compressor_LZSS_Lazy_Matching = 56
Public Const Compressor_LZW_Static_Hash = 57
Public Const Compressor_LZW_Dynamic_Hash = 58
Public Const Compressor_Huffman_Non_Greedy = 59
Public Const Compressor_Huffman_Non_Greedy2 = 60
Public Const Compressor_Shortener = 61
Public Const Compressor_RLE3 = 62
Public Const Compressor_LZSS_2 = 63
Public Const Compressor_LZSS_3 = 64

Public CompName(64) As String

Private AutoDecodeIsOn As Boolean   'to see if autodecode is used

'this routine is to initialize the text which can be returned to
'the user to say which compressor/coder is used
Public Sub Init_CoderNameDataBase()
    CodName(Coder_Differantiator) = "Differentiator"
    CodName(Coder_AddDifferantiator) = "Add Differentiator"
    CodName(Coder_BWT) = "Burrows-Wheeler Transform type 1"
    CodName(Coder_Fix128) = "Fix 128 bit 7"
    CodName(Coder_Fix128B) = "Fix 128 bit 1"
    CodName(Coder_Seperator) = "Seperator"
    CodName(Coder_Flatter64) = "Flatter 64"
    CodName(Coder_Flatter16) = "Flatter 16"
    CodName(Coder_FrequentieShifter) = "Frequentie Shifter"
    CodName(Coder_MTF_No_Header) = "Move to Front coder without header"
    CodName(Coder_MTF_With_Header) = "Move to Front coder with header"
    CodName(Coder_SortSwap) = "Sort & Swap"
    CodName(Coder_Used_To_Front) = "Used to Front"
    CodName(Coder_ValueDownShift) = "Value DOWN shifter"
    CodName(Coder_ValueUpShift) = "Value UP shifter"
    CodName(Coder_ValueTwister) = "Value Twister"
    CodName(Coder_Base64) = "Base 64"
    CodName(Coder_Numerator) = "Numerator Version 1"
    CodName(Coder_Numerator2) = "Numerator Version 2"
    CodName(Coder_Scrambler) = "Scrambler"
    CodName(Coder_BWT2) = "Burrows-Wheeler Transform type 2"
    CodName(Coder_BWT_noRecursion) = "Burrows-Wheeler Transform type 3"
    
    CompName(Compressor_Combiner2Bytes) = "2 bytes Combiner"
    CompName(Compressor_Combiner3Bytes) = "3 bytes Combiner"
    CompName(Compressor_CombinerVariable) = "Variable bytes Combiner"
    CompName(Compressor_EliasDelta) = "Elias Delta"
    CompName(Compressor_EliasGamma) = "Elias Gamma"
    CompName(Compressor_Eliminator) = "Eliminator"
    CompName(Compressor_Eliminator_Loop) = "Eliminator Loop"
    CompName(Compressor_Fibonacci) = "Fibonacci"
    CompName(Compressor_Grouping64) = "Grouping 64"
    CompName(Compressor_HuffmanCodes) = "Huffman with Long dictionary"
    CompName(Compressor_HuffmanShortDict) = "Huffman with Short dictionary"
    CompName(Compressor_HuffmanShort16Chars) = "Huffman 16 chars"
    CompName(Compressor_Huffman_Non_Greedy) = "Huffman Non Greedy type 1"
    CompName(Compressor_Huffman_Non_Greedy2) = "Huffman Non Greedy type 2"
    CompName(Compressor_LZSS) = "LZSS"
    CompName(Compressor_LZSS_Lazy_Matching) = "LZSS with Lazy Matching"
    CompName(Compressor_LZW_Dynamic) = "LZW-dynamic"
    CompName(Compressor_LZW_Dynamic_Hash) = "LZW-dynamic with hashing"
    CompName(Compressor_LZW_LZSS) = "LZW 1 dict (Like LZSS)"
    CompName(Compressor_LZW_Multidict1Stream) = "LZW multidict 1 stream"
    CompName(Compressor_LZW_Multidict4Streams) = "LZW multidict 4 streams"
    CompName(Compressor_LZW_Predefined) = "LZW-Predefined"
    CompName(Compressor_LZW_Static) = "LZW-Static"
    CompName(Compressor_LZW_Static_Hash) = "LZW-Static with hashing"
    CompName(Compressor_Reducer_Dict16withHuffcodes) = "Reducer Dynamic 16 dict"
    CompName(Compressor_Reducer_Dynamic) = "Reducer Dynamic"
    CompName(Compressor_Reducer_HalfDictwithHuffcodes) = "Reducer Dynamic half dictionary"
    CompName(Compressor_Reducer_Preselect1) = "Reducer Dynamic Predefined 1"
    CompName(Compressor_Reducer_Preselect2) = "Reducer Dynamic Predefined 2"
    CompName(Compressor_Reducer_Preselect3) = "Reducer Dynamic Predefined 3"
    CompName(Compressor_Reducer_Static) = "Reducer Static"
    CompName(Compressor_Reducer_withHuffcodes) = "Reducer Dynamic with Huffcodes"
    CompName(Compressor_RLE4isRun) = "RLE 4=run"
    CompName(Compressor_RLEVar) = "RLE Variable 1 run"
    CompName(Compressor_RLEVarLoop) = "RLE Variable Loop"
    CompName(Compressor_SmartGrouping) = "Smart Grouping 1 stream"
    CompName(Compressor_SmartGrouping4Streams) = "Smart Grouping 4 streams"
    CompName(Compressor_VBC1) = "VBC 1 run-1"
    CompName(Compressor_VBC2) = "VBC 1 run-2"
    CompName(Compressor_VBCR) = "VBC Reorderble"
    CompName(Compressor_VBC_Dynamic) = "VBC Dynamic Type 1"
    CompName(Compressor_VBC_Dynamic2) = "VBC Dynamic Type 2"
    CompName(Compressor_Word1) = "Word (needs even numbers)"
    CompName(Compressor_Word2) = "Word (no special needs)"
    CompName(Compressor_Arithmetic) = "Arithmetic compressor"
    CompName(Compressor_LBE_Flat) = "Location Based Encoding Flat version"
    CompName(Compressor_LBE_3D) = "Location Based Encoding 3D version"
    CompName(Compressor_LBE_3D_2) = "Location Based Encoding 3D/2 version"
    CompName(Compressor_Arithmetic_DMC) = "Dynamic Arithmetic compressor Bitwise"
    CompName(Compressor_Arithmetic_Dynamic) = "Dynamic Arithmetic compressor"
    CompName(Compressor_Reducer_Dynamic_Golomb) = "Reducer dynamic with Golomb codes"
    CompName(Compressor_Reducer_Dynamic_Elias_Gamma) = "Reducer dynamic with Elias gamma codes"
    CompName(Compressor_Arithmetic_Dynamic_With_Dict) = "Dynamic Arithmetic compressor with dictionary"
    CompName(Compressor_Arithmetic_Dynamic_With_Dict_Rescale) = "Dynamic Arithmetic compressor with dictionary and rescale"
    CompName(Compressor_Arithmetic_DMC_Rescale) = "Dynamic Arithmetic compressor Bitwise and rescale"
    CompName(Compressor_Orderer) = "Orderer"
    CompName(Compressor_Stripper) = "Stripper"
    CompName(Compressor_Huffman_Dynamic) = "Huffman Dynamic"
    CompName(Compressor_Pairing) = "Pairing 64 chars"
    CompName(Compressor_Pairing128) = "Pairing 128 chars"
    CompName(Compressor_Shortener) = "Shortener"
    CompName(Compressor_RLE3) = "RLE variable width"
    CompName(Compressor_LZSS_2) = "LZSS without strings"
    CompName(Compressor_LZSS_3) = "LZSS bytes & strings"
    
End Sub

'copy original array to the workarray so that whe can work on it without
'changing the original contents
Public Sub Copy_Orig2Work()
    ReDim WorkArray(UBound(OriginalArray))
    Call CopyMem(WorkArray(0), OriginalArray(0), UBound(OriginalArray) + 1)
End Sub

'copy the workarray to the original array so that whe can apply a
'second compress/coder on the file
Public Sub Copy_Work2Orig()
    ReDim OriginalArray(UBound(WorkArray))
    Call CopyMem(OriginalArray(0), WorkArray(0), UBound(WorkArray) + 1)
End Sub

'This sub is used to start a coder
'whichcoder is the constant of the codertype
'Decode is used to say if we want to code or decode
Public Sub Start_Coder(WichCoder)
    Dim Decode As Boolean
    Dim StTime As Double
    Dim Text As String
    Dim LastUsed As Integer
    If UBound(OriginalArray) = 0 Then
        MsgBox "There is nothing to code/Decode"
        Exit Sub
    End If
    If AutoDecodeIsOn = False Then
        Decode = True
        frmCodeDecode.Show vbModal
        DoEvents
        If CompDecomp = 0 Then Exit Sub
        If CompDecomp = 1 Then Decode = False
    Else
        Decode = True
    End If
    If Decode = True Then
        LastUsed = UsedCodecs(UBound(UsedCodecs))
        If JustLoaded = True Then LastUsed = 0
        If (WichCoder Or 128) <> LastUsed Then
            Text = "This is not coded with the " & CodName(WichCoder) & Chr(13)
            If LastUsed = 0 Then
                Text = Text & "Its not coded at all"
            Else
                If LastUsed > 128 Then
                    Text = Text & "Its coded with the " & CodName(LastUsed And 127)
                Else
                    Text = Text & "Its compressed with " & CompName(LastUsed)
                End If
            End If
            MsgBox Text
            Exit Sub
        End If
    Else
        LastCoder = WichCoder Or 128
    End If
    LastDeCoded = Decode
    Call Copy_Orig2Work
    If JustLoaded = True Then
        JustLoaded = False
        ReDim UsedCodecs(0)
    End If
    StTime = Timer
    Master.MousePointer = MousePointerConstants.vbHourglass
    Select Case WichCoder
        Case 1
            If Decode = False Then Call Difference_Coder(WorkArray)
            If Decode = True Then Call Difference_DeCoder(WorkArray)
        Case 2
            If Decode = False Then Call FrequentShifter_Coder(WorkArray)
            If Decode = True Then Call FrequentShifter_DeCoder(WorkArray)
        Case 3
            If Decode = False Then Call BWT_CodecArray4(WorkArray)
            If Decode = True Then Call BWT_DeCodecArray4(WorkArray)
        Case 4
            If Decode = False Then Call Fix128_Coder(WorkArray)
            If Decode = True Then Call Fix128_DeCoder(WorkArray)
        Case 5
            If Decode = False Then Call FlattenTo64(WorkArray)
            If Decode = True Then Call DeFlattenTo64(WorkArray)
        Case 6
            If Decode = False Then Call MTF_CoderArray(WorkArray)
            If Decode = True Then Call MTF_DeCoderArray(WorkArray)
        Case 7
            If Decode = False Then Call MTF_CoderArray2(WorkArray)
            If Decode = True Then Call MTF_DeCoderArray2(WorkArray)
        Case 8
            If Decode = False Then Call Sort_Swap_Coder(WorkArray)
            If Decode = True Then Call Sort_Swap_DeCoder(WorkArray)
        Case 9
            If Decode = False Then Call Used2Front_Coder(WorkArray)
            If Decode = True Then Call Used2Front_DeCoder(WorkArray)
        Case 10
            If Decode = False Then Call ValueDownShifter_Coder(WorkArray)
            If Decode = True Then Call ValueDownShifter_DeCoder(WorkArray)
        Case 11
            If Decode = False Then Call ValueUpShifter_Coder(WorkArray)
            If Decode = True Then Call ValueUpShifter_Coder(WorkArray)
        Case 12
            If Decode = False Then Call ValueTwister_Coder(WorkArray)
            If Decode = True Then Call ValueTwister_DeCoder(WorkArray)
        Case 13
            If Decode = False Then Call Fix128B_Coder(WorkArray)
            If Decode = True Then Call Fix128B_DeCoder(WorkArray)
        Case 14
            If Decode = False Then Call Seperator_Coder(WorkArray)
            If Decode = True Then Call Seperator_DeCoder(WorkArray)
        Case 15
            If Decode = False Then Call Flatter16_coder(WorkArray)
            If Decode = True Then Call Flatter16_Decoder(WorkArray)
        Case 16
            If Decode = False Then Call Base64Array_Encode(WorkArray)
            If Decode = True Then Call Base64Array_Decode(WorkArray)
        Case 17
            If Decode = False Then Call Numerator_EnCoder(WorkArray)
            If Decode = True Then Call Numerator_DeCoder(WorkArray)
        Case 18
            If Decode = False Then Call Numerator2_EnCoder(WorkArray)
            If Decode = True Then Call Numerator2_DeCoder(WorkArray)
        Case 19
            If Decode = False Then Call AddDiffer_Coder(WorkArray)
            If Decode = True Then Call AddDiffer_DeCoder(WorkArray)
        Case 20
            If Decode = False Then Call Scrambler_Coder(WorkArray)
            If Decode = True Then Call Scrambler_DeCoder(WorkArray)
        Case 21
            If Decode = False Then Call BWT_CodecArray2(WorkArray)
            If Decode = True Then Call BWT_DeCodecArray2(WorkArray)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -