"Encrytage / Décryptage" à casser !

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

"Encrytage / Décryptage" à casser !

Message par brossden »

Bonjour à tous

Voilà j'ai écrit un petit soft qui permet aussi bien d'encrypter que de décrypter un fichier de taille quelconque. Le principe est que le même soft crypte un fichier en clair ou le décrype si celui ci à déjà été crypté avec ce logiciel avec la même phrase et la même clé de codage.

Le cryptage/décryptage est réalisé avec un simple xor et une clé qui est parfaitement reversible soit :

Crypté = Clair Xor Cle
Claire = Crypté Xor Cle

L'astuce est de réaliser une cle de cryptage aussi longue que le fichier lui même ce qui à mon avis rend le décodage plutôt difficile à mon avis.

Si cela intersse quelqu'un je peux vous donner plus de détails sur le fonctionnement du source que vous trouverez un peu plus bas.

Ma question est pensez vous qu'il est possible de décrypter un fichier ainsi crypté ?

Au lancement du programme une Phrase ( qui peut contenir tout type de caractère ASCII ) est proposée par défaut, elle peut biensur être modifiée à loisir et une clef de code numérique qui peut aussi être modifiée aussi.
Sans connaitre ces deux paramêtre je ne vois pas comment il est possible de retrouver le fichier d'origine.



Code : Tout sélectionner

  Enumeration
    #Win0 : #Frame0 : #Frame1 : #Frame2 : #Frame3
    #Str1: #Str2 : #Str3 : #Str4
    #BP0 : #BP1 : #BP2
    #Bar
  EndEnumeration
  
  Procedure Programme()
    Cle.s=GetGadgetText(#Str1)
    RandomSeed(Val(GetGadgetText(#Str2)))
    lg.l=Lof(1)
    lc=Len(Cle)
    *orig = AllocateMemory(lg+8) :
    *clef = AllocateMemory(lg+8)
    *code = AllocateMemory(lg+8) 
    For n=0 To lg
      If (n % 14000) = 0
        x.f=(n/lg*75)
        SetGadgetState(#Bar, x)
        UpdateWindow_(GadgetID(#Bar))
      EndIf 
      oct=Random(lc)
      PokeC(*clef+n,PeekC(@Cle+oct))
    Next
    ReadData(1,*orig,lg)
    
    For n.l = 0 To lg Step 8
      If (n % 14000) = 0
        x.f=(n/lg*25)+75
        SetGadgetState(#Bar, x)
        UpdateWindow_(GadgetID(#Bar))
        EndIf 
      a.q = PeekQ(*orig+n)
      b.q = PeekQ(*clef+n) 
      c.q = a ! b
      PokeQ(*code+n,c)
    Next
    WriteData(2,*code,lg)
    SetGadgetState(#Bar,0)
  EndProcedure
  
  Procedure Open_Win0()
    If OpenWindow(#Win0, 40, 100, 713, 180, "Encrypte  - Décrypte",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      If CreateGadgetList(WindowID(#Win0))
        Frame3DGadget(#Frame0, 10, 10, 570, 50, "Phrase servant de mot de passe")
        StringGadget(#Str1, 20, 30, 550, 20, "1 - * "+Chr(34)+"Mignonne allons voir si la rose, qui ce mation avait éclose"+Chr(34)+" * ")
        Frame3DGadget(#Frame1, 600, 10, 80, 50, "Clef de code")
        StringGadget(#Str2, 610, 30, 60, 20, "1500", #PB_String_Numeric|#PB_Text_Center)
        Frame3DGadget(#Frame2, 10, 70, 310, 50, "Fichier Source")
        StringGadget(#Str3, 20, 90, 265, 20, "")
        Frame3DGadget(#Frame3, 370, 70, 310, 50, "Fichier cible")
        StringGadget(#Str4, 380, 90, 265, 20, "")
        ButtonGadget(#BP0, 250, 130, 200, 30, "Encryptage / Décryptage")
        DisableGadget(#BP0,1)
        ButtonGadget(#BP1, 285, 90, 25, 20, "...")
        ButtonGadget(#BP2, 645, 90, 25, 20, "...")
        ProgressBarGadget(#Bar, 10,165, 695, 10, 1, 100)
      EndIf
    EndIf
  EndProcedure
  
  Open_Win0()
  SetActiveGadget(#Str1)
  
  Repeat
    Event = WaitWindowEvent() 
    WindowID = EventWindow() 
    GadgetID = EventGadget() 
    EventType = EventType() 
    If Event = #PB_Event_Gadget
      If GadgetID = #BP1
        SetGadgetText(#Str3,OpenFileRequester("Sectionnez le fichier Source à Traiter","*.*","*.*",1) )
      ElseIf GadgetID = #BP2
        SetGadgetText(#Str4,OpenFileRequester("Sectionnez le fichier Cible qui sera Traité","*.*","*.*",1) )
        OpenFile(2,GetGadgetText(#Str4))
        If Lof(2)>0 And IsFile(2)
          If MessageRequester("Attention le fichier existe déjà","Voulez vous vraiment écraser le contenu de ce fichier",4) <> 6
            SetGadgetText(#Str4,"")
          EndIf
        EndIf
        CloseFile(2)
      ElseIf GadgetID = #BP0
        OpenFile(1,GetGadgetText(#Str3)) 
        CreateFile(2,GetGadgetText(#Str4)) 
        Programme()
        SetGadgetText(#Str3,GetGadgetText(#Str4))
        SetGadgetText(#Str4,"")
        DisableGadget(#BP0,1)
        CloseFile(1)
        CloseFile(2)
      EndIf
      If GetGadgetText(#Str1) >"" And GetGadgetText(#Str2) >"" And GetGadgetText(#Str3) >"" And GetGadgetText(#Str4) >""  
        DisableGadget(#BP0,0)
      EndIf
    EndIf
  Until Event = #PB_Event_CloseWindow
  End
Denis

Bonne Jounée à tous
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

d'apres ce qu'ils ont expliqué dans pirate mag
c'est que si ta cle est aussi longue que le fichier , ça va...

mais si la clef ne fait que quelques caractere

pour une image JPEG par exemple l'entet commence toujours par

"ÿØÿà"+chr(0)+chr(10)+"JFIF"

hors si Crypté = Clair Xor Cle
alors Cle = "ÿØÿà"+chr(0)+chr(10)+"JFIF" Xor Crypté !!

voila la faiblesse du XOR :D

car dans les cas des fichiers on connais les entetes , donc avec un fichier crypter avec une petite clef ou bien une cle reconnaissable (le corbeau et le renard par exemple :D ) , ben si le debut de la clef renvoi
"maitre corbeau sur..." on peut etre sur de connaitre la suite n'est-ce pas !! :D

ensuite il existe meme des algo qui se serve du pourcentage de lettre dans un fichier TXT par exemple, et qui par plusieurs passe arrive a une aproximation , le probleme dans cette histoire c'est
1- la longueur de la cle , (en general les gens ne retienne pas des clef tres grandes (un poeme maximum, ))

2- la memoire du createur de la clef
en general les gens ne mette pas une clef du genre
f"dsfsdf87487+97fdq+9+7fdg56fb+*f" car il serai bien incapable de la retenir

donc on se retrouve avec des mots clair (prenom du chien, date de naissance ect ) , pour ça les brutes-Force marche pas mal

mais bon c'est sur , que plus la clef est grande et complique mieux c'est :D

ps; Merci pour le code ... :D
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Merci Dobro d'avoir répondu !

La clef de codage est aussi longue que le fichier et de plus créer d'un manière pseudo aléatoire par le programme lui même donc théoriquement pas de répétition.

Tu peux faire le test sur un fichier image.jpeg tu n'ira pas trés loin je pense !
Denis

Bonne Jounée à tous
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Le rabat joie :lol:
Le Gouvernement a décidé de relever le seuil de chiffrage dont l’utilisation est libre, de 40 bits à 128 bits.
Donc si la longueur de ta clé fait fait au moins 129 bits ---> au trou direct sans passer par la case départ :roll:
(ou alors il faut la "déposer" au tabac du coin :lol:
Donc ton message doit être plus petit que 129 bits :lol: (avec ta méthode)
Ce qui veut dire aussi que l'on doit savoir décoder des clés de longueur 128 bits :wink:
Image
Est beau ce qui plaît sans concept :)
Speedy Galerie
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Je ne vois pas l'astuce mais cela dois être trés rigolo !
Denis

Bonne Jounée à tous
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Hélas , pas d'astuce!
Légalement on n'a pas le droit de crypter ses données avec des clés plus longues que 128 bits :roll:
A moins d'en donner la clé à qui de droit :)
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

J'ai plusieurs solutions; l'une est notament d'utiliser plusieurs clé 128 bits sur le meme fichier et l'astuce est que le cryptage ne doit pas laisser transparaitre ce qu'etait le fichier...
Une autre astuce est d'utiliser des clés internes et publics que l'on pourrait choisir en complement de sa clé 128 bits.
Je proposerais un code dans quelques temps (j'y etait dessus depuis quelques semaines de toute facon)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

brossden ne demande pas une astuce !!

il demande a ce qu'on lui donne les faiblesse du code qu'il a mis sur le forum
(voir plus haut)

avant de reponde a tords et a travers, il me semble que vous devriez lire ce qu'il demande !! :?

la on a l'impression que l'un reponds a coté de la plaque
et l'autre veut montrer qu'il sait faire un code plus mieux bien ...

ps : un codage Xor, quelques soit la longeurs de la clef utilisé , elle reste en 8 bits !! puisqu'il sagit d'un codage ASCII (caractere par caractere)
rien a voir avec une clef RSA a X bits !!
donc brossden reste parfaitement dans la legalité....
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

L'astuce est de réaliser une cle de cryptage aussi longue que le fichier lui même ce qui à mon avis rend le décodage plutôt difficile à mon avis
C'est Brossden qui le disait :)
ps : un codage Xor, quelques soit la longeurs de la clef utilisé , elle reste en 8 bits !! puisqu'il sagit d'un codage ASCII (caractere par caractere)
rien a voir avec une clef RSA a X bits !!
Faudrait demander plusieurs avis sur cette question, s'il y a "assimilation" ou non à une "clé RSA" ou autre "longueur de clé", quand on juxtapose les "constituants" d'une clé de cryptage :roll:
Pour trouver la faiblesse du code, j'en suis hélas bien incapable :(
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

ps : un codage Xor, quelques soit la longeurs de la clef utilisé , elle reste en 8 bits !! puisqu'il sagit d'un codage ASCII (caractere par caractere)
rien a voir avec une clef RSA a X bits !!
La encore : vive l'ASM
Car au lieu d'appliquer caractere par caractere, on peux faire tourner sur eux meme les bits de la clé (ou du fichier) de X crans a gauche ou a droite !
Ainsi, le caractere 01110001 peux devenir : 10001011
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour à tous !

SHP je vais te dire le font de ma pensée !

Tu me (nous) gonfles avec ton assembleur, tu n'es pas ici sur un site dédié à ce type de programmation et encore moins dans cette zone intitulée "Débutant".
Si tu veux absolument jeter de la poudre au yeux à tous le monde, va donc sur des sites qui ont un rapport avec ta manière de développer.
Ici on parle PureBasic je te le rappelle.
Il serait aussi assez interessant que tu ne répondes le plus souvent à coté de la plaque!
Alors je veux bien mettre les compteurs à zéro si tu oublies un peu ton cher ASM.

Restons ZEN !

Ma question ici est :

Pensez vous que l'on puisse trouver un algorithme qui permette de retrouver le fichier d'origine une fois passé dans ma moulinette !


Le mieux, le moins bien, le plus rapide ou le plus autre chose ne m'intersse pas pour le moment.
Denis

Bonne Jounée à tous
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Pose donc ta question sur ce forum : il y a de la matière et pas la foule comme cela tu pourras discuter avec l'auteur lui-même :wink:

http://www.apprendre-en-ligne.net/forum ... um.php?f=1
http://www.apprendre-en-ligne.net/crypt ... index.html
Crypté = Clair Xor Cle
Claire = Crypté Xor Cle
Il n'y a pas une erreur là? Claire différent de Clair?
Pensez vous que l'on puisse trouver un algorithme qui permette de retrouver le fichier d'origine une fois passé dans ma moulinette !
Quel temps estimes-tu raisonnable ou déraisonnable pour retrouver le fichier d'origine pour casser la moulinette?

De plus si on donne une suite de caractères sans savoir si on doit retrouver une image, une musique, un texte, une vidéo...
il est quasi impossible de trouver quoi que ce soit :lol:

exemple pas compliqué de cryptage impossible à retrouver si tu ne connais pas la "règle"
Tu prends n'importe quoi, tu le Zippes
tu en tires la suite totale des 'caractères"
tu la bidouille avec une règle quelconque
(genre on part du milieu de cette suite, on prend un caractère avant, un caractère après, etc
On a cette nouvelle liste bidouillée
Et bien je te fiche mon billet que si on ne connait pas la génération du premier "texte" (ici un Zip)
+ la "règle" tu peux te brosser pour reconstituer le message original :)
Et pas la peine de se casser la binette à trouver un algorythme de décryptage :lol:
Dernière modification par Frenchy Pilou le jeu. 05/oct./2006 9:29, modifié 6 fois.
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour BROSSDEN

Eh bah dis donc, tu n'y va pas avec le dos de la cuillere......
Cela me rappelle un post sur la conversion hexa/texte en binaire...

http://purebasic.hmt-forum.com/viewtopic.php?t=5598

Moi ce qui m'étonne avec SPH que je respecte, comme tous les membres de ce forum, c'est qu'il essaye de mettre de l'assembleur un peu partout, (il faut dire qu'il me parrait bien plus rapide) et peut etre à des endroit ou il n'est pas demandé, et que lorsque je lui ai demandé si il voulait bien me faire le complément d'un trés bon code ASM qu'il m'avait donné sur le post précité, je n'ai pas eu vraiment de réponses positives, juste des questions .......pourquoi ??? moi j'etais intéréssé aussi par l'ASM, puisqu'il fait apparement partie du grand PURE.

En tout cas les 4 posts de suite démontre bien ton énervement.

Le monde n'est il plus amour et la programmation une passion qui détend ????

Bonne journée à toi BROSSDEN, a toi SPH et à tous.
Dernière modification par Kwai chang caine le jeu. 05/oct./2006 10:29, modifié 1 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Frenchy Pilou a écrit :
Crypté = Clair Xor Cle
Claire = Crypté Xor Cle
Il n'y a pas une erreur là? Claire différent de Clair?
lorsque je parle de hors sujet de reponse a coté de la plaque, ceci en est un parfait exemple

ce n'est pas du code que j'ai posté mais du "pseudo code"
j'aurai utilisé des balises, et mon "colorer" pour t'en mettre pleins la vue sinon ...
ce qui fait qu'il ne sagit pas de variables , mais de MOTs
et en l'occurence il y a une faute d'orthographe , et alors, t'en fais jamais toi ??

ce qui est a retenir dans mes propos c'est que

un CARACTERE cripté c'est egale a un caractere en clair XOR caractere de CLEF
donc

un CARACTERE en CLAIR est egale a un CARACTERE cripté xor clef !!

rassure moi , faire l'imbecile en faisant celui qui n'a pas compris et en repondant une fois de plus a coté du sujet , est un fait-expres non ?
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

ok mais admet que l'on sait que c'est un simple fichier txt !
Denis

Bonne Jounée à tous
Répondre