Crypteur par hypercube matriciel en 4 dimension

Description

Le titre parle de lui même. Etant difficellement expliquable avec des mots je vous laisse regarder le code. Je souhaiterai un avis (bon comme mauvais) et surtout les explication de cet avis ...
Je voudrai savoir si quelqu'un avait une astuce aussi pour traiter de grosse chaine de fichier car j'ai quelque problème avec cela ...

Merci d'avance

Source / Exemple :


Public Function Crypt(ByRef Chaine As String, ByRef MotDePasse As String) As String

        'Console.WriteLine("Crypt(" & Chaine & "," & MotDePasse & ")")

        Dim LongeurChaine As Integer = Len(Chaine)
        Dim LongeurMotDePasse As Integer = Len(MotDePasse)

        Dim I As Integer
        Dim Level1 As Integer
        Dim Level2 As Integer
        Dim Car As Byte
        Dim Qbe As Byte

        Dim I0 As Integer = 0
        Dim I1 As Integer = 0
        Dim I2 As Integer = 0
        Dim I3 As Integer = 0
        Dim J0 As Integer = 0
        Dim J1 As Integer = 0
        Dim J2 As Integer = 0
        Dim J3 As Integer = 0

        If LongeurMotDePasse = 0 Or LongeurChaine = 0 Then
            Crypt = Chaine
            Exit Function
        End If

        Crypt = New String(" ", LongeurChaine)
        Dim HyperCube(3, 3, 3, 3, 3, 3, 3, 3) As Byte

        GenHyperCube(HyperCube, MotDePasse)

        Level1 = LongeurChaine Mod 256
        Level2 = LongeurMotDePasse Mod 256

        For I = 1 To LongeurChaine

            'Console.Write("Position [" & New String("0", 3 - Len(Level1.ToString)) & Level1.ToString & "-")
            'Console.Write(New String("0", 3 - Len(Level2.ToString)) & Level2.ToString & "] -> ")

            ' Niveau 1
            I0 = Level1 \ 64
            Level1 = Level1 Mod 64
            I1 = Level1 \ 16
            Level1 = Level1 Mod 16
            I2 = Level1 \ 4
            I3 = Level1 Mod 4
            ' Niveau 2
            J0 = Level2 \ 64
            Level2 = Level2 Mod 64
            J1 = Level2 \ 16
            Level2 = Level2 Mod 16
            J2 = Level2 \ 4
            J3 = Level2 Mod 4

            Car = Asc(Mid(Chaine, I, 1))
            Qbe = HyperCube(I0, I1, I2, I3, J0, J1, J2, J3)

            'Console.Write("Car : " & New String("0", 3 - Len(Car.ToString)) & Car & " -> ")
            'Console.Write("Qbe : " & New String("0", 3 - Len(Qbe.ToString)) & Qbe & " -> ")
            'Console.Write("Xor : " & New String("0", 3 - Len((Car Xor Qbe).ToString)) & (Car Xor Qbe).ToString)
            'Console.WriteLine("")
            Mid(Crypt, I, 1) = Chr(Car Xor Qbe)

            Level1 = Qbe
            Level2 = Car
        Next

    End Function

    Public Function UnCrypt(ByRef Chaine As String, ByRef MotDePasse As String) As String

        'Console.WriteLine("UnCrypt(" & Chaine & "," & MotDePasse & ")")

        Dim LongeurChaine As Integer = Len(Chaine)
        Dim LongeurMotDePasse As Integer = Len(MotDePasse)
        Dim I As Integer
        Dim Level1 As Integer
        Dim Level2 As Integer
        Dim Car As Byte
        Dim Qbe As Byte

        Dim I0 As Integer = 0
        Dim I1 As Integer = 0
        Dim I2 As Integer = 0
        Dim I3 As Integer = 0
        Dim J0 As Integer = 0
        Dim J1 As Integer = 0
        Dim J2 As Integer = 0
        Dim J3 As Integer = 0

        If LongeurMotDePasse = 0 Or LongeurChaine = 0 Then
            UnCrypt = Chaine
            Exit Function
        End If

        UnCrypt = New String(" ", LongeurChaine)
        Dim HyperCube(3, 3, 3, 3, 3, 3, 3, 3) As Byte

        GenHyperCube(HyperCube, MotDePasse)

        Level1 = LongeurChaine Mod 256
        Level2 = LongeurMotDePasse Mod 256

        For I = 1 To LongeurChaine

            'Console.Write("Position [" & New String("0", 3 - Len(Level1.ToString)) & Level1.ToString & "-")
            'Console.Write(New String("0", 3 - Len(Level2.ToString)) & Level2.ToString & "] -> ")

            ' Niveau 1
            I0 = Level1 \ 64
            Level1 = Level1 Mod 64
            I1 = Level1 \ 16
            Level1 = Level1 Mod 16
            I2 = Level1 \ 4
            I3 = Level1 Mod 4
            ' Niveau 2
            J0 = Level2 \ 64
            Level2 = Level2 Mod 64
            J1 = Level2 \ 16
            Level2 = Level2 Mod 16
            J2 = Level2 \ 4
            J3 = Level2 Mod 4

            Car = Asc(Mid(Chaine, I, 1))
            Qbe = HyperCube(I0, I1, I2, I3, J0, J1, J2, J3)

            'Console.Write("Car : " & New String("0", 3 - Len(Car.ToString)) & Car & " -> ")
            'Console.Write("Qbe : " & New String("0", 3 - Len(Qbe.ToString)) & Qbe & " -> ")
            'Console.Write("Xor : " & New String("0", 3 - Len((Car Xor Qbe).ToString)) & (Car Xor Qbe).ToString)
            'Console.WriteLine("")

            Level2 = Car Xor Qbe
            Level1 = Qbe

            Mid(UnCrypt, I, 1) = Chr(Level2)
        Next

    End Function

    Private Sub GenHyperCube(ByRef HyperCube(,,,,,,,) As Byte, ByVal MotDePasse As String)

        Dim Cpt As Integer = 1
        Dim I0 As Integer = 0
        Dim I1 As Integer = 0
        Dim I2 As Integer = 0
        Dim I3 As Integer = 0
        Dim J0 As Integer = 0
        Dim J1 As Integer = 0
        Dim J2 As Integer = 0
        Dim J3 As Integer = 0

        Dim LongeurMotDePasse As Integer = Len(MotDePasse)

        Dim MonTab(255) As Integer

        Dim Precedent As Integer = 0
        Dim Suivant As Integer = 0

        'FileOpen(1, "./cube", OpenMode.Output, OpenAccess.Write)

        While Not I3 > 3
            While Not J3 > 3
                HyperCube(I0, I1, I2, I3, J0, J1, J2, J3) = _
                    ( _
                        (I0 * 1) + _
                        (I1 * 4) + _
                        (I2 * 16) + _
                        (I3 * 64) _
                    ) Xor ( _
                        Cpt Mod 256 _
                    ) Xor ( _
                        Asc(Mid(MotDePasse, Cpt, 1)) _
                    ) Xor ( _
                        (J0 * 1) + _
                        (J1 * 4) + _
                        (J2 * 16) + _
                        (J3 * 64) _
                    ) Xor ( _
                        Precedent _
                    ) Xor ( _
                        Suivant _
                    )

                Precedent = Suivant
                Suivant = HyperCube(I0, I1, I2, I3, J0, J1, J2, J3)
                ' Print(1, Chr(HyperCube(I0, I1, I2, I3, J0, J1, J2, J3)))
                Cpt = Cpt + 1

                If LongeurMotDePasse < Cpt Then
                    Cpt = 1
                End If

                J0 = J0 + 1
                If J0 > 3 Then
                    J0 = 0
                    J1 = J1 + 1
                End If
                If J1 > 3 Then
                    J1 = 0
                    J2 = J2 + 1
                End If
                If J2 > 3 Then
                    J2 = 0
                    J3 = J3 + 1
                End If

            End While

            J0 = 0
            J1 = 0
            J2 = 0
            J3 = 0

            I0 = I0 + 1
            If I0 > 3 Then
                I0 = 0
                I1 = I1 + 1
            End If
            If I1 > 3 Then
                I1 = 0
                I2 = I2 + 1
            End If
            If I2 > 3 Then
                I2 = 0
                I3 = I3 + 1
            End If

        End While

        'FileClose(1)

    End Sub

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.