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

📄 megamail.bas

📁 e-maill文件加密程序完整的源代码
💻 BAS
📖 第 1 页 / 共 3 页
字号:
        SelectCipher (NumberOfBlocks%)
        Put #2, , CryptBuffer
    Next
    '* clear plaintext
    For i% = 0 To BUFFERSIZE - 1: CryptBuffer(i%) = 0: Next

    If ShortBufferLen% > 0 Then

        ReDim CryptBuffer(ShortBufferLen% - 1)
        Get #1, , CryptBuffer
        '* process the last buffer (adjust shortblock)
        BufferPointer& = 0
        SetShort% = 0
        If ShortBlockLen% > 0 Then SetShort% = 1
        NumberOfBlocks% = (ShortBufferLen% \ BlockLen%) - SetShort%
        SelectCipher (NumberOfBlocks%)

        If ShortBlockLen% > 0 Then
            '* save the FBR and do the two blocks in reverse
            For i% = 1 To BlockLen%: SaveFBR(i%) = Pre_FBR(i%): Next
            For i% = 1 To BlockLen%: Pre_FBR(i%) = 0: Next
            BufferPointer& = ShortBufferLen% - BlockLen%
            SelectCipher (1)

            For i% = 1 To BlockLen%: Pre_FBR(i%) = SaveFBR(i%): Next
            Foffset% = BlockLen% + ShortBlockLen%
            BufferPointer& = ShortBufferLen% - Foffset%
            SelectCipher (1)
        End If

        '* write the shortbuffer
        Put #2, , CryptBuffer
        '* clear plaintext
        For i% = 0 To ShortBufferLen% - 1: CryptBuffer(i%) = 0: Next

    End If

    End If 'CompFlag

    MainForm.Enabled = -1

End Sub


Sub CryptInit()

    Select Case process%
        Case 1
            BlockLen% = LeapFrogBlockLen
            LeapFrogExpand
        Case 2
            BlockLen% = LeapFrogBlockLen
            LeapFrogExpand
    End Select

End Sub


Sub SelectCipher(LastBlock%)

    Select Case process%
        Case 1
            LeapFrogEncipher (LastBlock%)
        Case 2
            LeapFrogDecipher (LastBlock%)

        '* more ciphers may be added here
    End Select

End Sub


Private Sub LeapFrogEncipher(LastBlock%)

    Dim T1 As Integer, T2 As Integer, T3 As Integer, T4 As Integer

    For BlockNumber% = 0 To LastBlock% - 1

        p1% = CryptBuffer(BufferPointer&)
        p2% = CryptBuffer(BufferPointer& + 1)
        p3% = CryptBuffer(BufferPointer& + 2)
        p4% = CryptBuffer(BufferPointer& + 3)
        p5% = CryptBuffer(BufferPointer& + 4)
        p6% = CryptBuffer(BufferPointer& + 5)
        p7% = CryptBuffer(BufferPointer& + 6)
        p8% = CryptBuffer(BufferPointer& + 7)

        If CipherMode% = CBC Then
            p1% = p1% Xor FBR(1)
            p2% = p2% Xor FBR(2)
            p3% = p3% Xor FBR(3)
            p4% = p4% Xor FBR(4)
            p5% = p5% Xor FBR(5)
            p6% = p6% Xor FBR(6)
            p7% = p7% Xor FBR(7)
            p8% = p8% Xor FBR(8)
        End If

        For x% = 0 To (LeapFrogRounds% \ 2) - 1

            '* create the T variables
            T1 = A1%(p1% Xor SK(x%, 0))
            T2 = A2%(p2% Xor SK(x%, 1))
            T3 = A3%(p3% Xor SK(x%, 2))
            T4 = A4%(p4% Xor SK(x%, 3))

            '* T variable order "A"
            p5% = p5% Xor A1%(A1%(T2 Xor T3) Xor T4)
            p6% = p6% Xor A2%(A2%(T1 Xor T4) Xor T3)
            p7% = p7% Xor A3%(A3%(T4 Xor T2) Xor T1)
            p8% = p8% Xor A4%(A4%(T3 Xor T1) Xor T2)
            p5% = (p5% + T1) And &HFF
            p6% = (p6% + T2) And &HFF
            p7% = (p7% + T3) And &HFF
            p8% = (p8% + T4) And &HFF

            '* do other half without swapping
            T1 = A5%(p5% Xor SK(x%, 4))
            T2 = A6%(p6% Xor SK(x%, 5))
            T3 = A7%(p7% Xor SK(x%, 6))
            T4 = A8%(p8% Xor SK(x%, 7))

            p1% = p1% Xor A5%(A5%(T2 Xor T3) Xor T4)
            p2% = p2% Xor A6%(A6%(T1 Xor T4) Xor T3)
            p3% = p3% Xor A7%(A7%(T4 Xor T2) Xor T1)
            p4% = p4% Xor A8%(A8%(T3 Xor T1) Xor T2)
            p1% = (p1% + T1) And &HFF
            p2% = (p2% + T2) And &HFF
            p3% = (p3% + T3) And &HFF
            p4% = (p4% + T4) And &HFF

        Next

        For x% = (LeapFrogRounds% \ 2) To (LeapFrogRounds% - 1)

            '* create the T variables
            T1 = A1%(p1% Xor SK(x%, 0))
            T2 = A2%(p2% Xor SK(x%, 1))
            T3 = A3%(p3% Xor SK(x%, 2))
            T4 = A4%(p4% Xor SK(x%, 3))

            '* T variable order "B"
            p5% = p5% Xor A1%(A1%(T2 Xor T3) Xor T4)
            p6% = p6% Xor A2%(A2%(T3 Xor T4) Xor T1)
            p7% = p7% Xor A3%(A3%(T4 Xor T1) Xor T2)
            p8% = p8% Xor A4%(A4%(T1 Xor T2) Xor T3)
            p5% = (p5% + T1) And &HFF
            p6% = (p6% + T2) And &HFF
            p7% = (p7% + T3) And &HFF
            p8% = (p8% + T4) And &HFF

            '* do other half without swapping
            T1 = A5%(p5% Xor SK(x%, 4))
            T2 = A6%(p6% Xor SK(x%, 5))
            T3 = A7%(p7% Xor SK(x%, 6))
            T4 = A8%(p8% Xor SK(x%, 7))

            p1% = p1% Xor A5%(A5%(T2 Xor T3) Xor T4)
            p2% = p2% Xor A6%(A6%(T3 Xor T4) Xor T1)
            p3% = p3% Xor A7%(A7%(T4 Xor T1) Xor T2)
            p4% = p4% Xor A8%(A8%(T1 Xor T2) Xor T3)
            p1% = (p1% + T1) And &HFF
            p2% = (p2% + T2) And &HFF
            p3% = (p3% + T3) And &HFF
            p4% = (p4% + T4) And &HFF

        Next

        '* whiten data
        p1% = p1% Xor SK(LeapFrogRounds%, 0)
        p2% = p2% Xor SK(LeapFrogRounds%, 1)
        p3% = p3% Xor SK(LeapFrogRounds%, 2)
        p4% = p4% Xor SK(LeapFrogRounds%, 3)

        p5% = p5% Xor SK(LeapFrogRounds%, 4)
        p6% = p6% Xor SK(LeapFrogRounds%, 5)
        p7% = p7% Xor SK(LeapFrogRounds%, 6)
        p8% = p8% Xor SK(LeapFrogRounds%, 7)

        '* write cipher text
        CryptBuffer(BufferPointer&) = p1%
        CryptBuffer(BufferPointer& + 1) = p2%
        CryptBuffer(BufferPointer& + 2) = p3%
        CryptBuffer(BufferPointer& + 3) = p4%
        CryptBuffer(BufferPointer& + 4) = p5%
        CryptBuffer(BufferPointer& + 5) = p6%
        CryptBuffer(BufferPointer& + 6) = p7%
        CryptBuffer(BufferPointer& + 7) = p8%

        FBR(1) = p1%
        FBR(2) = p2%
        FBR(3) = p3%
        FBR(4) = p4%
        FBR(5) = p5%
        FBR(6) = p6%
        FBR(7) = p7%
        FBR(8) = p8%

        BufferPointer& = BufferPointer& + 8
        ByteNumber& = ByteNumber& + 8

    Next

End Sub


Private Sub LeapFrogDecipher(LastBlock%)

    Dim T1 As Integer, T2 As Integer, T3 As Integer, T4 As Integer

    For BlockNumber% = 0 To LastBlock% - 1

        p1% = CryptBuffer(BufferPointer&)
        p2% = CryptBuffer(BufferPointer& + 1)
        p3% = CryptBuffer(BufferPointer& + 2)
        p4% = CryptBuffer(BufferPointer& + 3)
        p5% = CryptBuffer(BufferPointer& + 4)
        p6% = CryptBuffer(BufferPointer& + 5)
        p7% = CryptBuffer(BufferPointer& + 6)
        p8% = CryptBuffer(BufferPointer& + 7)

        FBR(1) = p1%
        FBR(2) = p2%
        FBR(3) = p3%
        FBR(4) = p4%
        FBR(5) = p5%
        FBR(6) = p6%
        FBR(7) = p7%
        FBR(8) = p8%

        '* unwhiten data
        p1% = p1% Xor SK(LeapFrogRounds%, 0)
        p2% = p2% Xor SK(LeapFrogRounds%, 1)
        p3% = p3% Xor SK(LeapFrogRounds%, 2)
        p4% = p4% Xor SK(LeapFrogRounds%, 3)

        p5% = p5% Xor SK(LeapFrogRounds%, 4)
        p6% = p6% Xor SK(LeapFrogRounds%, 5)
        p7% = p7% Xor SK(LeapFrogRounds%, 6)
        p8% = p8% Xor SK(LeapFrogRounds%, 7)

        For y% = 0 To (LeapFrogRounds% \ 2) - 1

            '* invert subkeys
            x% = (LeapFrogRounds% - 1) - y%

            '* create the T variables
            T1 = A5%(p5% Xor SK(x%, 4))
            T2 = A6%(p6% Xor SK(x%, 5))
            T3 = A7%(p7% Xor SK(x%, 6))
            T4 = A8%(p8% Xor SK(x%, 7))

           '* T variable order "B"
            p1% = (p1% - T1) And &HFF
            p2% = (p2% - T2) And &HFF
            p3% = (p3% - T3) And &HFF
            p4% = (p4% - T4) And &HFF
            p1% = p1% Xor A5%(A5%(T2 Xor T3) Xor T4)
            p2% = p2% Xor A6%(A6%(T3 Xor T4) Xor T1)
            p3% = p3% Xor A7%(A7%(T4 Xor T1) Xor T2)
            p4% = p4% Xor A8%(A8%(T1 Xor T2) Xor T3)

            '* do other half without swapping
            T1 = A1%(p1% Xor SK(x%, 0))
            T2 = A2%(p2% Xor SK(x%, 1))
            T3 = A3%(p3% Xor SK(x%, 2))
            T4 = A4%(p4% Xor SK(x%, 3))

            p5% = (p5% - T1) And &HFF
            p6% = (p6% - T2) And &HFF
            p7% = (p7% - T3) And &HFF
            p8% = (p8% - T4) And &HFF
            p5% = p5% Xor A1%(A1%(T2 Xor T3) Xor T4)
            p6% = p6% Xor A2%(A2%(T3 Xor T4) Xor T1)
            p7% = p7% Xor A3%(A3%(T4 Xor T1) Xor T2)
            p8% = p8% Xor A4%(A4%(T1 Xor T2) Xor T3)

        Next

        For y% = (LeapFrogRounds% \ 2) To (LeapFrogRounds% - 1)

            '* invert subkeys
            x% = (LeapFrogRounds% - 1) - y%

            '* create the T variables
            T1 = A5%(p5% Xor SK(x%, 4))
            T2 = A6%(p6% Xor SK(x%, 5))
            T3 = A7%(p7% Xor SK(x%, 6))
            T4 = A8%(p8% Xor SK(x%, 7))

           '* T variable order "A"
            p1% = (p1% - T1) And &HFF
            p2% = (p2% - T2) And &HFF
            p3% = (p3% - T3) And &HFF
            p4% = (p4% - T4) And &HFF
            p1% = p1% Xor A5%(A5%(T2 Xor T3) Xor T4)
            p2% = p2% Xor A6%(A6%(T1 Xor T4) Xor T3)
            p3% = p3% Xor A7%(A7%(T4 Xor T2) Xor T1)
            p4% = p4% Xor A8%(A8%(T3 Xor T1) Xor T2)

            '* do other half without swapping
            T1 = A1%(p1% Xor SK(x%, 0))
            T2 = A2%(p2% Xor SK(x%, 1))
            T3 = A3%(p3% Xor SK(x%, 2))
            T4 = A4%(p4% Xor SK(x%, 3))

            p5% = (p5% - T1) And &HFF
            p6% = (p6% - T2) And &HFF
            p7% = (p7% - T3) And &HFF
            p8% = (p8% - T4) And &HFF
            p5% = p5% Xor A1%(A1%(T2 Xor T3) Xor T4)
            p6% = p6% Xor A2%(A2%(T1 Xor T4) Xor T3)
            p7% = p7% Xor A3%(A3%(T4 Xor T2) Xor T1)
            p8% = p8% Xor A4%(A4%(T3 Xor T1) Xor T2)

        Next

        If CipherMode% = CBC Then
            p1% = p1% Xor Pre_FBR(1)
            p2% = p2% Xor Pre_FBR(2)
            p3% = p3% Xor Pre_FBR(3)
            p4% = p4% Xor Pre_FBR(4)
            p5% = p5% Xor Pre_FBR(5)
            p6% = p6% Xor Pre_FBR(6)
            p7% = p7% Xor Pre_FBR(7)
            p8% = p8% Xor Pre_FBR(8)
        End If

        Pre_FBR(1) = FBR(1)
        Pre_FBR(2) = FBR(2)
        Pre_FBR(3) = FBR(3)
        Pre_FBR(4) = FBR(4)
        Pre_FBR(5) = FBR(5)
        Pre_FBR(6) = FBR(6)
        Pre_FBR(7) = FBR(7)
        Pre_FBR(8) = FBR(8)

        '* write plain text
        CryptBuffer(BufferPointer&) = p1%
        CryptBuffer(BufferPointer& + 1) = p2%
        CryptBuffer(BufferPointer& + 2) = p3%
        CryptBuffer(BufferPointer& + 3) = p4%
        CryptBuffer(BufferPointer& + 4) = p5%
        CryptBuffer(BufferPointer& + 5) = p6%
        CryptBuffer(BufferPointer& + 6) = p7%
        CryptBuffer(BufferPointer& + 7) = p8%

        BufferPointer& = BufferPointer& + 8
        ByteNumber& = ByteNumber& + 8

    Next

End Sub


Private Sub LeapFrogExpand()

    PackPassword
    For i% = 0 To 23
        If k%(23 - i%) <> 0 Then Exit For
    Next
    RealKeyLen% = 24 - i%
    UserKeyLen% = RealKeyLen%

    If WithSalt% Then RealKeyLen% = RealKeyLen% + BlockLen%

    '* replicate key into array
    y% = 0
    For x% = 0 To 255

    '* if Salt is TRUE then append CBC-MAC to real key
        If WithSalt% Then
            If y% > (UserKeyLen% - 1) Then
                LongKey%(x%) = Salt(SaltIndex%)
                SaltIndex% = (SaltIndex% + 1) Mod BlockLen%
            Else
                LongKey%(x%) = k%(y%)
            End If
        Else
            LongKey%(x%) = k%(y%)
        End If

        y% = (y% + 1) Mod RealKeyLen%
    Next

    '* initialize expanded key arrays
    For i% = 0 To 255
        A1%(i%) = i%: A5%(i%) = i%
        A2%(i%) = i%: A6%(i%) = i%
        A3%(i%) = i%: A7%(i%) = i%
        A4%(i%) = i%: A8%(i%) = i%
    Next

    j% = 0
    '* randomize array
    For i% = 0 To 255
        j% = (j% + A1%(i%) + LongKey%(i%)) And &HFF
        SWAP A1%(i%), A1%(j%)
    Next
    For i% = 0 To 255
        j% = (j% + A1%(i%)) And &HFF: SWAP A1%(i%), A1%(j%)
    Next

    '* randomize the other arrays
    For i% = 0 To 255
        j% = (j% + A1%(A2%(i%)) + A1%(LongKey%(i%))) And &HFF
        SWAP A2%(i%), A2%(j%)
    Next
    For i% = 0 To 255
        j% = (j% + A2%(A3%(i%)) + A2%(LongKey%(i%))) And &HFF
        SWAP A3%(i%), A3%(j%)
    Next
    For i% = 0 To 255
        j% = (j% + A3%(A4%(i%)) + A3%(LongKey%(i%))) And &HFF
        SWAP A4%(i%), A4%(j%)
    Next

    For i% = 0 To 255
        j% = (j% + A4%(A5%(i%)) + A4%(LongKey%(i%))) And &HFF
        SWAP A5%(i%), A5%(j%)
    Next
    For i% = 0 To 255
        j% = (j% + A5%(A6%(i%)) + A5%(LongKey%(i%))) And &HFF
        SWAP A6%(i%), A6%(j%)
    Next
    For i% = 0 To 255
        j% = (j% + A6%(A7%(i%)) + A6%(LongKey%(i%))) And &HFF
        SWAP A7%(i%), A7%(j%)
    Next
    For i% = 0 To 255
        j% = (j% + A7%(A8%(i%)) + A7%(LongKey%(i%))) And &HFF
        SWAP A8%(i%), A8%(j%)
    Next

    '* make subkeys from S-boxes
    Erase SK
    For i% = 0 To 63
        SK(0, 0) = (SK(0, 0) + A1%(i%)) And &HFF
        SK(0, 1) = (SK(0, 1) + A2%(i%)) And &HFF
        SK(0, 2) = (SK(0, 2) + A3%(i%)) And &HFF
        SK(0, 3) = (SK(0, 3) + A4%(i%)) And &HFF
        SK(0, 4) = (SK(0, 4) + A5%(i%)) And &HFF
        SK(0, 5) = (SK(0, 5) + A6%(i%)) And &HFF
        SK(0, 6) = (SK(0, 6) + A7%(i%)) And &HFF
        SK(0, 7) = (SK(0, 7) + A8%(i%)) And &HFF
    Next
    For i% = 0 To LeapFrogRounds% - 1
        SK(i% + 1, 0) = (SK(i%, 0) + A1%(64 + i%)) And &HFF
        SK(i% + 1, 1) = (SK(i%, 1) + A2%(64 + i%)) And &HFF
        SK(i% + 1, 2) = (SK(i%, 2) + A3%(64 + i%)) And &HFF
        SK(i% + 1, 3) = (SK(i%, 3) + A4%(64 + i%)) And &HFF
        SK(i% + 1, 4) = (SK(i%, 4) + A5%(64 + i%)) And &HFF
        SK(i% + 1, 5) = (SK(i%, 5) + A6%(64 + i%)) And &HFF
        SK(i% + 1, 6) = (SK(i%, 6) + A7%(64 + i%)) And &HFF
        SK(i% + 1, 7) = (SK(i%, 7) + A8%(64 + i%)) And &HFF
    Next
    For i% = 0 To LeapFrogRounds%
        SK(i%, 0) = A5(SK(i%, 0))
        SK(i%, 1) = A6(SK(i%, 1))
        SK(i%, 2) = A7(SK(i%, 2))
        SK(i%, 3) = A8(SK(i%, 3))
    Next
    For i% = 0 To LeapFrogRounds%
        SK(i%, 4) = A1(SK(i%, 4))
        SK(i%, 5) = A2(SK(i%, 5))
        SK(i%, 6) = A3(SK(i%, 6))
        SK(i%, 7) = A4(SK(i%, 7))
    Next

    '* erase initial key arrays
    Erase initkey%, k%, LongKey%
    '* default to NoSalt
    WithSalt% = 0

⌨️ 快捷键说明

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