Crypteur par hypercube matriciel en 4 dimension

Soyez le premier à donner votre avis sur cette source.

Vue 11 790 fois - Téléchargée 378 fois

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

Ajouter un commentaire

Commentaires

MAHDAN
Messages postés
3
Date d'inscription
lundi 15 mai 2006
Statut
Membre
Dernière intervention
23 mai 2006
-
merci,mais t'auras pas un code pour huffman bien commenté?
psycho81
Messages postés
88
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
17 février 2008
-
Pour faire simple, tu peux allier un simple huffman (je pense que les sources sont trouvable si tu as la flemme de les trouver), et ensuite crypter le résultat avec ce crypteur.

Il te restera donc a faire (dans l'ordre) :

Huffman
Cryptage
Décryptage
Hufmann inversé

Voili voilou
MAHDAN
Messages postés
3
Date d'inscription
lundi 15 mai 2006
Statut
Membre
Dernière intervention
23 mai 2006
-
Bonjour,
bravo il est balaise ton code!!!
Pr contre je dois réaliser une application en VB.Net pour le cryptage/compression et décryptage/décompression,t'auras pas une idée pour cette application ou est ce que t'as le temps pour m'aider,il me reste 3semaines pour la rendre je veux un truc tout simple pas de complexité et merci bcp.
psycho81
Messages postés
88
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
17 février 2008
-
Message à l'intention des delphistes (et en particulier à japee, qui dès mon plus jeune âge m'a plongé dans l'Univers de la programmation). Ce source n'est plus actualisé car le concept utilisé à été amélioré sur le code http://www.vbfrance.com/code.aspx?ID=22883 où l'hypercube devient mouvant lors du cryptage. Pour la version delphi, celà ne saurait tarder, les examens passés, j'aurai beaucoup plus de temps pour des choses vraiment sérieuses :)

Vive VB ! Vive Delphi ! Vive ... Nous !
japee
Messages postés
1715
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
2 décembre 2019
2 -
Tiens, je ne savais pas qu'Inekman était compromis dans le milieu VB... mais je prends acte, lol ;-)

Alors, psycho81, tu attends quoi pour traduire tes élucubrations dans un langage compréhensible, comme le Delphi (par exemple) mdr !

Désolé, les gars, c'est pas de la provoc, juste un petit clin d'oeil à psycho81 qui comprendra ;-)

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.