crypter en vb
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 33

crypter en vb



  1. #1
    invite76db3c86

    crypter en vb


    ------

    Bonjour à tous ,
    je suis pas très fort en vb mais je me lance dans la programmation d'un code pour crypter/décrypter des fichiers de tous types (je commence par tester sur les fichiers txt) à partir du principe de l'algorithme RSA :
    avant tout je créer une clé du type : n = pq où p et q sont deux entiers , d un entier quelconque premier avec phi(n) = p-1 q-1 et e son inverse dans Z/phi(n) Z .
    Je met ces informations la forme suivante dans un fichier texte : "n,phi(n);d:e" (les séparateurs , ; : sont volontaires pour pouvoir recueillir les informations dans le programme).

    Ensuite je programme l'algorithme suivant :
    l'utilisateur rentre le chemin d'accès au fichier clair
    je récupère sous forme de chaine de caractère son contenu :

    dim fic = My.Computer.Filesystem.Readall text(textbox2.text)

    ainsi que sa longueur

    dim len = fic.length

    j'invite l'utilisateur à choisir le fichier contenant la clé
    je récupère le contenu string du fichier texte contenant la clé : key
    je récupère ses informations en utilisant les fonctions mid , instr et en convertissant sous le type integer :
    dim n as integer
    dim phi as integer
    .
    .
    .
    n = mid(key, 1, Instr(key, ",")-1)
    phi = mid(key , instr(key, ",") +1 , instr(key , ";")-1)
    d = mid (key , instr(key,";") +1, instr(key,":") -1 )
    e = mid(key, instr(key,":") +1 , )

    ensuite je débute l'algorithme:

    Code:
    dim i as integer
    i = 1
    dim s
    dim t
    dim result = ""
    
    
    while i <= len 
     
      s = Asc (Mid(fic,i,1))
      t = s^e
      t=t mod n
      result = result & char(t)
      i = i+1
    
    end while
    
    My.Computer.Filesystem.writealltext(textbox3.text , result)
    Pour le décryptage , l'algorithme est le suivant :
    je récupère les mêmes informations que précédemment dans le fichier clé dans les variables n , phi ,d et e ainsi que le contenu du fichier crypté dans la variable fic.

    Code:
    i=1
    While i<= len
      s = Asc(mid(fic,i,1))
      t = s^d
      t=t mod n
      result = result & char(t)
    i= i +1
    end while

    .
    J'éxecute ce programme (cryptage puis décryptage sur le même fichier texte) sur un fichier texte contenant la chaine "abcdefghijklmnopqrstuvxy" au départ ... mais PAS A l'ARRIVEE ...

    Je ne comprends pas d'où ca vient , outre les probleme de "dépassement de capacité" lorsque je calcul les puissances (que je résout en mettant une boucle en remettant le résultat de t*t modulo n à chaque incrémentation) .
    Pourriez vous m'aider ?

    Merci d'avance
    Bonne journée

    -----
    Dernière modification par JPL ; 06/08/2013 à 19h11. Motif: Ajout de la balise Code (#) pour garder l'indentation

  2. #2
    invite76db3c86

    Re : crypter en vb

    Petite précision : dans ma clé j'ai bien sur choisi n>256

  3. #3
    invite76db3c86

    Re : crypter en vb

    Là je teste avec "a" .
    J'écris "a" dans le fichier à crypter.
    Je lance le cryptage et j'obtiens Ä...
    or asc(a) = 97 , asc(Ä)= 190

    le programme devrait calculer s= 97 ; t = 97^17 (ma clé est 253,220;13:17) , puis t = t mod 253 = 15 (à la main)
    pourtant je ne vois pas où l'algorithme est susceptible de donner cette erreur ...

  4. #4
    invite2d7144a7

    Re : crypter en vb

    Bonjour,

    As-tu idée de la valeur de 97^17 ?

    Calculatrice Windows => de l'ordre de 6e+33

    Et de la limite max d'un entier en VB ?

    Là, je ne sais pas, mais sans le moindre doute nettement plus bas (de l'ordre de 2^32 [4294967296, ordre de grandeur 4e+9], ou, au mieux, de 2^64 [18446744073709551616, ordre de grandeur 2e+19), ce qui est très loin du compte.

  5. A voir en vidéo sur Futura
  6. #5
    invite76db3c86

    Re : crypter en vb

    Bonjour ,
    d'abord merci pour votre réponse
    En fait cette erreur je l'avais déja résolue (dépassement de capacité) : pour calculer s^d (ou s^e) sans dépasser la capacité d'un integer je fais la boucle suivante :

    Code:
     
    dim increment
    increment = 1
    
    dim temp
    temp = s mod n
    
    while increment < d
    
    temp = t * temp
    temp = temp mod n
    
    increment = increment+1
    end while
    l'avantage étant qu'à chaque incrémentation le résultat est remis modulo n , et comme n est suffisament petit la capacité n'est plus dépassé.

    L'erreur venait justement de cette boucle que j'avais mal programmer (je faisais t*t à chaque incrémentation ce qui est une grossière erreur puisque ca ne calcul pas s^d)

    Maintenant mon programme marche parfaitement sur les fichiers texte pour des caractères basique (l'alphabet , majuscules , chiffres , la plupart des accentuations , séparateurs et parenthèses ) .
    Par contre , je pensais que ca fonctionnerait (que le cryptage puis décryptage me donnerait le même fichier que l'orginal) mais ce n'est pas le cas ...
    Pour tant ma clé est grande ... peut être pas assez pour dépasser le nombre de caractère en utf 8 ...
    en particulier je viens d'essayer avec n = 8633.
    J'essaye sur un fichier open office (.odt) , mais ca me donne des caractères qui ne correspondent pas au fichier d'origine .

    Pourriez vous m'aidez svp ?

    Merci encore pour votre réponse
    Bonne soirée à tous .

  7. #6
    bisou10

    Re : crypter en vb

    ODT est un format zippé, tu dois être parfaitement symétrique pour avoir ne pas corrompre ton fichier. Tu as un message d'erreur ?

    Note que si tu veux chiffrer un truc en .NET, utilise plutot les classes spécifiques. Pour en savoir plus: http://bidou.developpez.com/tutoriel...curite/crypto/

  8. #7
    invite76db3c86

    Re : crypter en vb

    Non je n'ai pas de message d erreur mais j utilise le chiffrement rsa donc non symétrique. Mais je ne suis pas un programmeur je voulais juste creer mon propre programme et ma cle pour chiffrer mes fichiers. Cependant si vous aviez une explication intuitive au fait qu un chiffrement asymetrique corromp certains fichier je suis preneur
    Merci d avance

  9. #8
    invite2d7144a7

    Re : crypter en vb

    Bonjour,
    Citation Envoyé par physiquantique Voir le message
    Non je n'ai pas de message d erreur mais j utilise le chiffrement rsa donc non symétrique. Mais je ne suis pas un programmeur je voulais juste creer mon propre programme et ma cle pour chiffrer mes fichiers. Cependant si vous aviez une explication intuitive au fait qu un chiffrement asymetrique corromp certains fichier je suis preneur
    Merci d avance
    Facile : ton programme est faux.

    Si ce type de cryptage générait des erreurs, je ne pense pas qu'on l'aurait choisi comme standard, non ?

  10. #9
    bisou10

    Re : crypter en vb

    Citation Envoyé par physiquantique Voir le message
    Non je n'ai pas de message d erreur mais j utilise le chiffrement rsa donc non symétrique. Mais je ne suis pas un programmeur je voulais juste creer mon propre programme et ma cle pour chiffrer mes fichiers. Cependant si vous aviez une explication intuitive au fait qu un chiffrement asymetrique corromp certains fichier je suis preneur
    Merci d avance
    C'est symetrique dans le sens "chiffrer avec la clé privé" et "déchiffrer avec la clé publique" donnent exactement le même message initial. Il y a des cas (par exemple en compression d'image JPEG, rarement dans le chiffrement) où l'on accepte que l'opération ne soit pas strictement identique.

    Dans tous les cas je te conseille de comparer octets par octets pour trouver l'erreur.

  11. #10
    invite2d7144a7

    Re : crypter en vb

    Bonjour,
    Citation Envoyé par bisou10 Voir le message
    C'est symetrique dans le sens "chiffrer avec la clé privé" et "déchiffrer avec la clé publique" donnent exactement le même message initial. Il y a des cas (par exemple en compression d'image JPEG, rarement dans le chiffrement) où l'on accepte que l'opération ne soit pas strictement identique.

    Dans tous les cas je te conseille de comparer octets par octets pour trouver l'erreur.
    Quand on parle de crypter, il est absolument impossible d'accepter de ne pas retrouver le document d'origine.

    En donnant l'exemple de jpeg, tu confonds cryptage et compression avec perte, ce sont des domaines qui n'ont rien en commun.

  12. #11
    bisou10

    Re : crypter en vb

    Oui, je tentais de lui expliquer qu'il y avait des cas en informatique où les données pouvaient passer par des algorithmes ne donnant pas des résultats symétriques.

    Mais effectivement ce sont 2 domaines non superposables (compression trés différent de chiffrement, autant dans le but que dans les moyens).

  13. #12
    invite76db3c86

    Re : crypter en vb

    En réponse à whoami : il serait vraiment "étrange" (dans le sens où mon programme traite les caractères seulement en fonction de leur numéro de caractère , et que sur un fichier texte tous les caractères réapparaissent d'origine après "cryptage" et "décryptage) ...
    Mais dans mon programme je ne fait que lire le fichier texte sous forme de chaine , et chiffrer selon rsa et une clé contenu dans un fichier texte , vers un autre fichier ...
    Peut etre que certaines extension ne peuvent pas être lues comme une chaine de caractère sans perdre des informations , mais vu que je ne sais pas grand chose en programmation , dans ma petite tête tous les fichiers sont en quelques sorte un fichier texte avec un encodage et un langage propre .
    Bref , je ne pense pas que mon programme soit faux par rapport à ce que j'imagine qu'il fasse , mais peut être que ce que j'imagine qu'il fait ne permet pas de crypter des fichiers autres que fichiers textes et rtf ...

    Un autre exemple : pour un fichier rtf , lorsque je crypte et décrypte (entre guillemets) , le fichier réapparait presque d'origine si ce n'est que c'est un fichier texte où le formatage du texte original apparait explicitement ... Je pense qu'il y a un problème d'extension ... Mais je ne sais pas comment gérer les extensions dans un programme .

  14. #13
    invite76db3c86

    Re : crypter en vb

    Code:
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            Dim fickey = TextBox1.Text
            Dim key
            Dim encod = ComboBox1.Text
            Dim fic
           
            fic = My.Computer.FileSystem.ReadAllText(TextBox2.Text)
            key = My.Computer.FileSystem.ReadAllText(fickey)
    
    
      
    
            Dim n = Val(Mid(key, 1, InStr(key, ",") - 1))
            Dim phin = Val(Mid(key, InStr(key, ",") + 1, InStr(key, ";") - InStr(key, ",")))
            Dim d = Val(Mid(key, InStr(key, ";") + 1, InStr(key, ":") - InStr(key, ";")))
            Dim f = Val(Mid(key, InStr(key, ":") + 1))
    
            Dim i As Integer
            i = 1
            Dim s
    
    
    
    
    
            Dim t As ULong
    
            Dim increment
            increment = 1
    
    
            Dim result = ""
    
    
            Dim temp
    
            Dim length = fic.length
            While i <= length
                s = AscW(Mid(fic, i, 1))
                t = s Mod n
                increment = 1
                temp = t
    
                While increment < f
                    temp = t * temp
                    increment = increment + 1
                    temp = temp Mod n
    
                End While
    
                t = temp
    
    
    
                result = result & ChrW(t)
    
    
    
                Button4.BackColor = Color.Orange
    
                i = i + 1
    
    
            End While
            TextBox4.Text = "n =" & n & "phi =" & phin & "d=" & d & "f =" & f & "t= " & t
    
           
    
            Dim destination = TextBox3.Text
            If CheckBox1.Checked = True Then
                destination = TextBox2.Text
    
    
            End If
            My.Computer.FileSystem.WriteAllText(destination, result, False)
    
            MsgBox("fichier crypté avec succès , clé publique : n = " & n.ToString & "d = " & d)
            Button4.BackColor = Color.LawnGreen
    
        End Sub
    
        Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
            Dim fickey = TextBox1.Text
            Dim keylen
    
            Dim key
            Dim encod = ComboBox1.Text
            Dim fic
            If CheckBox1.Checked = True Then
                TextBox2.Text = TextBox3.Text
    
    
            End If
    
    
            fic = My.Computer.FileSystem.ReadAllText(TextBox3.Text)
            key = My.Computer.FileSystem.ReadAllText(fickey)
            
    
            keylen = key.length
    
    
            Dim n = Val(Mid(key, 1, InStr(key, ",") - 1))
            Dim phin = Val(Mid(key, InStr(key, ",") + 1, InStr(key, ";") - InStr(key, ",")))
            Dim d = Val(Mid(key, InStr(key, ";") + 1, InStr(key, ":") - InStr(key, ";")))
            Dim f = Val(Mid(key, InStr(key, ":") + 1))
            Dim i As Integer
    
    
            i = 1
            Dim s As ULong
    
    
    
    
            Dim t As integer
    
    
    
    
            Dim increment as integer = 1
    
    
            Dim result = ""
    
    
    
            Dim length = fic.length
    
            While i <= length
                s = AscW(Mid(fic, i, 1))
                t = s Mod n
    
                t = s Mod n
                increment = 1
    
                Dim temp = t
    
              
    
                While increment < d
                    temp = t * temp
                    increment = increment + 1
                    temp = temp Mod n
    
    
                End While
    
                t = temp
    
               
    
    
    
                result = result & ChrW(t)
    
             
                Button4.BackColor = Color.Orange
                ProgressBar1.Value = 97 * i / length
                i = i + 1
    
    
            End While
    
    
            Dim destination = TextBox2.Text
            If CheckBox1.Checked = True Then
                destination = TextBox3.Text
    
    
            End If
            My.Computer.FileSystem.WriteAllText(destination, result, False)
    
            MsgBox("fichier décrypté avec succès , clé publique : n = " & n.ToString & "d = " & d)
            Button4.BackColor = Color.LawnGreen
        End Sub

  15. #14
    invite2d7144a7

    Re : crypter en vb

    Bonjour,

    L'extension d'un fichier n'a absolument rien à voir pour en crypter le contenu.

    C'est toi qui décide de l'extension, et pour le fichier crypté, et pour le fichier après décryptage.

    Si tu veux contrôler que l'original et le fichier décrypté sont strictement identiques, tu calcules leur hash-code, md5 ou autre(s). Si les codes obtenus sont identiques, alors les fichiers le sont.
    Sinon ...

  16. #15
    invite7cd2b282

    Re : crypter en vb

    Salut,

    Pourquoi descendre jusqu'au contenu du fichier ? Pour pouvoir crypter tous les types de fichiers sans se poser aucune question sur l'encodage, peut-être pourrais-tu travailler directement sur les octets avec la méthode ReadAllBytes ?

    En tout cas, ce qui est sûr, c'est que la méthode ReadAllText ne permet pas de lire des fichiers autre que des fichiers texte brut (donc tu peux oublier les .doc, .odt etc...).

  17. #16
    invite76db3c86

    Re : crypter en vb

    Bonjour ,
    merci pour vos réponses .
    Je crois que théophane vient de me souffler la clé de l'énigme ...
    Effectivement j'utilisais readalltext sans savoir qu'on pouvait lire un fichier avec les octets .

    Mais comment je fais pour reconstruire le fichier crypté ?

  18. #17
    invite76db3c86

    Re : crypter en vb

    Code:
    dim fic() as byte = My.computer.Filesystem.Readallbytes(textbox2.text)
    
    dim key...
    dim n ...
    dim d ...
    dim e...
    
    
    dim len = fic.length
    dim i as integer =0
    
    dim t as integer
    dim s as integer
    dim temp
    dim increment = 1
    
    
    dim result() as byte
    
    while i <= len
    
     s = fic.getvalue(i)
    while increment <= d
    
     temp = t*temp mod n
    
    increment = increment+1
    end while
    
    t = temp mod n
    
    result.setvalue(t,i)
    
    i=i+1
    end while
    
    My.computer.filesystem.writeallbytes("...",result)
    Comme ça ?

  19. #18
    invite7cd2b282

    Re : crypter en vb

    Je t'avoue que je n'ai pas du tout regardé le coeur de ton programme, mais la méthode WriteAllBytes existe bien oui.

  20. #19
    invite76db3c86

    Re : crypter en vb

    En fait ce que je ne sais pas c'est comment créer un table de bytes result de même longueur que fic et y rentrer à chaque incrémentation la valeur du byte crypté .

    J'ai essayé en déclarant dim result() as byte

    et dans ma boucle while , une fois la valeur t=s^f mod n calculée (s est la valeur du i-eme octet)
    je fais result.setvalue(i,t)

    Mais il y a un message d'erreur : La référence d'objet n'est pas définie à une instance d'un objet.

  21. #20
    invite7cd2b282

    Re : crypter en vb

    J'y connais rien en crypto, mais si j'ai bien compris, quand tu cryptes ton octet (dont la valeur est entre 0 et 255), tu n'as pas une valeur entre 0 et 255.
    Du coup, ça dépasse de ton octet.
    Je crains que tu ne puisses pas crypter octet par octet. Je ne sais pas trop comment découper tout ça. Bref, il faut attendre ceux qui s'y connaissent ! J'ai parlé de ReadAllBytes parce que je sais qu'au moins, tu as une info brute. Pour le reste...

  22. #21
    bisou10

    Re : crypter en vb

    Attention, un caractète en UTF-8 c'est 2 octets. Ca marchera cependant si tu fais octets par octets, mais l'affichage dans la textbox peut être perturbé.

  23. #22
    invite2d7144a7

    Re : crypter en vb

    Bonjour,

    Je n'avais pas pris la peine de regarder le code.

    Mais oui, c'est une règle à respecter pour ce genre de logiciel : toujours utiliser les fonctions de lecture/écriture dites "binaires", les fonctions pour texte conduisant obligatoirement à des problèmes, car :
    - lors de la lecture, on lit ligne par ligne, ce qui automatiquement revient à ne pas tenir compte des sauts de lignes pour les encrypter.
    - donc le fichier crypté est faux par rapport à l'original, puisqu'il manque 1 ou 2 octets par ligne, selon le système.


  24. #23
    invite76db3c86

    Re : crypter en vb

    Je ne vois qu un moyen : lire octet par octets le fichier clair et crypter les octets en stockant les résultats dans un ficher txt avec separateur entre chaque nombre ... de toute facon ca sert a rien de garder l extension du fichier pendant oe cryptage je la stockerai a la fin du fichier txt . Cependant je ne sais toujours pas comment reconztruire un fichier octet par octet.

  25. #24
    bisou10

    Re : crypter en vb

    Quoi ? En .NET tu travailles sur des streams (System.IO.Stream) avec leurs méthodes ReadByte et WriteByte. Tu fais un petit coup de ReadByte, tu 'chiffres' et tu enregistre avec WriteByte.

  26. #25
    invite76db3c86

    Re : crypter en vb

    Code:
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    
            Dim fic = My.Computer.FileSystem.ReadAllBytes(TextBox2.Text)
            Dim len = fic.Length
            Dim ficc(len) As Integer
    
            Dim j As Integer = 0
    
           
    
    
    
            Dim essai As Integer = 1
    
            MsgBox("" & fic.GetValue(essai).ToString)
    
    
    
    
            Dim result = ""
            Dim i As Integer = 1
    
            Dim increment As Integer = 1
            Dim s As Integer = 0
            Dim t As Integer = 0
    
    
            Dim temp
            Dim key = My.Computer.FileSystem.ReadAllText(TextBox1.Text)
            Dim n = Val(Mid(key, 1, InStr(key, ",") - 1))
            Dim phin = Val(Mid(key, InStr(key, ",") + 1, InStr(key, ";") - InStr(key, ",")))
            Dim d = Val(Mid(key, InStr(key, ";") + 1, InStr(key, ":") - InStr(key, ";")))
            Dim f = Val(Mid(key, InStr(key, ":") + 1))
            TextBox4.Text = "n= " & n.ToString & " phi(n) = " & phin.ToString & " d= " & d.ToString & "e = " & f.ToString
    
    
    
            While i < len
                s = Val(fic.GetValue(i))
    
    
    
    
    
    
                t = s Mod n
    
                While increment < f
                    temp = t * temp Mod n
                    increment = increment + 1
                End While
                t = temp Mod n
                result = result & ";" & t.ToString
                ProgressBar1.Value = 97 * i / len
                i = i + 1
                Button4.BackColor = Color.Orange
    
            End While
    
            TextBox4.AppendText("t= " & t.ToString)
    
            My.Computer.FileSystem.WriteAllText(TextBox3.Text, result, False)
            Button4.BackColor = Color.LawnGreen
            MsgBox("fichier crypté avec succès , clé publique : n= " & n.ToString & " d = " & d.ToString)
    
    End sub
    Sur un fichier texte marqué "abcdef" ca me donne un fichier texte avec ";0;0;0;0" .
    Je suis désespéré ...
    Je sais pas utiliser les tableau ni le type byte() ... alors du coup ...

  27. #26
    invite76db3c86

    Re : crypter en vb

    en fait c'est bon (j'avais oublier d'initialiser temp ...) Mais c'est le décryptage qui marche pas ...
    je fais un algorithme similaire en faisant result(i) = t avec t = i eme nombre puissance e modulo n

    Mais au moment de faire result(i) = t visual studio me dit "La référence d'objet n'est pas définie à une instance d'un objet."

  28. #27
    bisou10

    Re : crypter en vb

    result n'est pas initialisé (tu dois instancier ta table, et avec une valeur d'éléments finis - même si VB autorise ReDim de mémoire)

  29. #28
    invite76db3c86

    Re : crypter en vb

    Bon j'ai concocté quelques trucs sans être trop sur de moi ...

    Alors sur les fichiers autres que txt ca marche pas du coup j'ai essayer sur un fichier texte ...

    Disons que ca fonctionne mais pas comme il faudrait :
    ca retourne le même texte mais avec des espaces entre chaques caractères .
    Je ne vois absolument pas pourquoi ... pourtant quand je regarde le fichier txt correspondant au fichier crypté (le fichier original est estampillé "abc") , il n'ya que trois octets ...
    Code:
    Public Class Form1
    
        Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            TextBox4.Text = ""
            Button4.BackColor = Color.White
            Button5.BackColor = Color.White
            ProgressBar1.Value = 0
    
            Dim fic = My.Computer.FileSystem.ReadAllBytes(TextBox2.Text)
            Dim len = fic.Length
            Dim ficc(len) As Integer
    
            Dim j As Integer = 0
    
           
    
    
    
            Dim essai As Integer = 1
    
            MsgBox("" & fic.GetValue(essai).ToString)
    
    
    
    
            Dim result = ""
            Dim i As Integer = 0
    
            Dim increment As Integer = 1
            Dim s As Integer = 0
            Dim t As Integer = 0
    
    
            Dim temp
            Dim key = My.Computer.FileSystem.ReadAllText(TextBox1.Text)
            Dim n = Val(Mid(key, 1, InStr(key, ",") - 1))
            Dim phin = Val(Mid(key, InStr(key, ",") + 1, InStr(key, ";") - InStr(key, ",")))
            Dim d = Val(Mid(key, InStr(key, ";") + 1, InStr(key, ":") - InStr(key, ";")))
            Dim f = Val(Mid(key, InStr(key, ":") + 1))
            TextBox4.Text = "n= " & n.ToString & " phi(n) = " & phin.ToString & " d= " & d.ToString & "e = " & f.ToString
    
    
    
            While i < len
                s = Val(fic(i))
    
    
                t = s Mod n
    
                temp = t Mod n
    
    increment = 1
    
    
                While increment < f
                    temp = t * temp Mod n
                    increment = increment + 1
                End While
                t = temp Mod n
                result = result & ";" & t.ToString
                ProgressBar1.Value = 97 * i / len
                i = i + 1
                Button4.BackColor = Color.Orange
    
            End While
    
            TextBox4.AppendText("t= " & t.ToString)
    
            My.Computer.FileSystem.WriteAllText(TextBox3.Text, result & ";", False)
            Button4.BackColor = Color.LawnGreen
            MsgBox("fichier crypté avec succès , clé publique : n= " & n.ToString & " d = " & d.ToString)
    
    
        End Sub
    
        Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    
            TextBox4.Text = ""
            Button4.BackColor = Color.White
            Button5.BackColor = Color.White
    
            ProgressBar1.Value = 0
    
            Dim result(1) As Byte
    
    
    
    
    
    
            Dim zero(1) As Byte
            zero(1) = 0
    
         
            Dim i As Integer = 1
    
            Dim increment As Integer = 1
            Dim s
            Dim t
            Dim temp
            Dim key = My.Computer.FileSystem.ReadAllText(TextBox1.Text)
            Dim n = Val(Mid(key, 1, InStr(key, ",") - 1))
            Dim phin = Val(Mid(key, InStr(key, ",") + 1, InStr(key, ";") - InStr(key, ",")))
            Dim d = Val(Mid(key, InStr(key, ";") + 1, InStr(key, ":") - InStr(key, ";")))
            Dim f = Val(Mid(key, InStr(key, ":") + 1))
            TextBox4.Text = "n= " & n.ToString & " phi(n) = " & phin.ToString & " d= " & d.ToString & "e = " & f.ToString
            Dim fic = My.Computer.FileSystem.ReadAllText(TextBox3.Text)
            My.Computer.FileSystem.WriteAllBytes(TextBox3.Text, zero, False)
    
            Dim len = fic.Length
    
            Dim ilen = 1
            Dim fictemp = fic
    
    
    
            While fictemp <> ""
    
                fictemp = Mid(fictemp, InStr(fictemp, ";") + 1)
    
                TextBox4.AppendText("fictemp =" & fictemp)
    
    
                s = Val(Mid(fictemp, 1, InStr(fictemp, ";")))
    
                t = s Mod n
                temp = t Mod n
    
    increment=1
                While increment < d
                    temp = t * temp Mod n
                    increment = increment + 1
    
    
                End While
                t = temp Mod n
    
    
    
                result(1) = CByte(t)
                TextBox4.AppendText("result" & i.ToString & " = " & result(1).ToString)
    
    
    
    
                My.Computer.FileSystem.WriteAllBytes(TextBox2.Text, result, True)
    
                i = i + 1
    
    
    
    
    
                Button5.BackColor = Color.Orange
    
            End While
            TextBox4.AppendText("t= " & t.ToString)
    
            Button5.BackColor = Color.LawnGreen
            MsgBox("fichier décrypté avec succès , clé publique : n= " & n.ToString & " d = " & d.ToString)
    
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            OpenFileDialog1.ShowDialog()
            TextBox1.Text = OpenFileDialog1.FileName
    
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            OpenFileDialog2.ShowDialog()
            TextBox2.Text = OpenFileDialog2.FileName
        End Sub
    
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            OpenFileDialog3.ShowDialog()
            TextBox3.Text = OpenFileDialog3.FileName
        End Sub
    End Class

  30. #29
    invite76db3c86

    Re : crypter en vb

    Bonjour à tous ,

    Ca y'est j'ai enfin quelquechose de plus que correct : mon programme crypte tous les types de fichiers et les décrypte à l'identique (enfin pour ce qui est de la partie visible en tout cas ^^) .
    Seul inconvénient : le temps d'éxecution augmente assez vite avec la taille du fichier .

    J'ai commencé à travailler à réduire la complexité ... Par exemple au lieu de la boucle

    tant que i <= d

    temp = t*temp mod n
    i = i+1
    end while

    je créer des functions :

    Code:
    function binaire(byval p as integer)
    dim pprime as integer()
    dim k as integer =0
    dim q as integer = p
    While q>0
    Redim Preserve pprime(k)
    pprime(k)= q Mod 2
    q = q\2
    k = k+1
    
    End while
    
    Return pprime
    
    end function
    qui permet de décomposer en base binaire (dans un tableau de 1 et de 0) les puissances d et e .

    et la fonction :

    Code:
    Function puimod(Byval s as integer , Byval prime As integer() , Byval n as integer)
    Dim l as integer = 0
    dim temp as integer = s mod n
    dim k = prime.Length
    
    Dim t as integer = 1
    
    While <l < k
    
    If prime(l) = 1 Then
    t = t * temp Mod n
    end if
    temp = temp ^2 mod n
    l=l+1
    End While
    return t
    end function
    qui calcule s^d mod n à partir de la décomposition de d en binaire .

    J'utilise alors dans le cryptage et décryptage binaire pour calculer la décomposition de d et e en binaire puis dans les boucles je fais puimod(s,d,n). Ca fonctionne parfaitement mais je sais pas si c'est la seule amélioration possible ...

    Si vous avez d'autre idées

    Merci d'avance
    Bonne journée

  31. #30
    invite1c6b0acc

    Re : crypter en vb

    Bonjour,
    Si tu veux un programme vraiment rapide, il faudrait à mon avis changer de langage. Le C ou le C++ me semblent mieux adaptés.
    Sinon, un bon livre de cryptographie : Handbook of applied cryptography
    Au chapitre 14, il donne des algorithmes performants.
    A+

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Crypter la partition système avec True Crypt impossible
    Par invite095a9e9b dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 07/07/2012, 15h42
  2. crypter/decryp. facilement des .doc,.xls,et .htm contre curieux non informaticiens
    Par invitee4fa6f42 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 7
    Dernier message: 04/10/2011, 17h34
  3. logiciel pour crypter un fichier!
    Par invite0eb4fbfe dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 14/01/2011, 16h25