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