Petit bug chez moi. Ton programme n'aime pas les 0.
Code : Tout sélectionner
Chaine d'origine : 0123
Chaine : 0ÿ52ÿ55ÿ56ÿ57ÿ
Chaine décodée : ú123
Code : Tout sélectionner
Chaine d'origine : 0123
Chaine : 0ÿ52ÿ55ÿ56ÿ57ÿ
Chaine décodée : ú123
@AR-s : tu n'as pas vu que j'ai fait une version differente de la tienne dans ton topic !!Ar-S a écrit :Etrange moi j'ai :
0123456 donne (...) (ch2v5) (page 7 ligne 4 mot 22 (Mot 8 page 5 ligne 16) (ch2v5). (ch7v3).
P.S :
Ensuite je ne veux pas que ce soit un soft indécryptable, c'est juste pour s'amuser. En revanche j'ai pas bien compris le coup du retour automatique mais c'est peut-être interressant.
J'ai rien envie d'améliorer du tout.Dobro a écrit :@Chris, mon but etait de demontrer que l'on pouvai utiliser Random pour encoder un text
si tu veux l'ameliorer,(si t'as du temps a perdre) libre a toi, et merci d'avance
Je pensai que tu voulais un retour. Tu l'as. Pour le reste fais comme tu veux.Dobro a écrit :Dobro a écrit :ça marche la ?
oui ! merci pour le retour !!Chris a écrit : J'ai rien envie d'améliorer du tout.
Tu as posté ça, hier :Je pensai que tu voulais un retour. Tu l'as. Pour le reste fais comme tu veux.Dobro a écrit :Dobro a écrit :ça marche la ?
(Pis d'abord, corrige donc le bug du zéro. C'est TON bug, pas le mien.)
Code : Tout sélectionner
; code par Dobro , modifié par Chris
; sur une base de AR-S
; algorythme de crypage acces sur le random !!
Declare.s ReplaceFirst(String$, StringToFind$, StringToReplace$)
Enumeration
#ARS
#BT_Coder
#BT_Decoder
#Affiche
#Button_3
#Text_4
#Message
#Texte1
#Button_7
#Titre
#Font_Titre
#spinGadget
#BT_Ouvrir
#BT_Sauver
EndEnumeration
Enumeration
#PopUp
EndEnumeration
;}
#CRLF = Chr(13)+Chr(10)
Define.l Event, EventWindow , EventGadget , EventType , EventMenu
;}
Procedure OpenWindow_ARS()
If OpenWindow ( #ARS , 31, 372, 368, 250, "Dobro Crypt" , #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar )
If CreatePopupMenu(#PopUp)
MenuItem(0, "Copier" + Chr(9) + "Ctrl+C")
MenuItem(1, "Coller" + Chr(9) + "Ctrl+V")
EndIf
If CreateGadgetList ( WindowID ( #ARS ))
SpinGadget ( #spinGadget , 309,150,30, 25, 0, 9, #PB_Spin_ReadOnly|#PB_Spin_Numeric )
SetGadgetText ( #spinGadget , "0" )
ButtonGadget ( #BT_Coder , 7, 150, 70, 25, "Coder" )
ButtonGadget ( #BT_Decoder , 82, 150, 70, 25, "Decoder" )
ButtonGadget(#BT_Ouvrir, 157,150,70,25,"Ouvrir")
ButtonGadget(#BT_Sauver, 232,150,70,25,"Sauver")
; EditorGadget(#Affiche, 5, 194, 355, 160, #PB_Editor_ReadOnly)
;SetGadgetText(#Affiche,"")
ButtonGadget ( #Button_3 , 6, 200, 355, 20, "Copier le résultat dans le presse papier" )
TextGadget ( #Text_4 , 7, 178, 95, 15, "Résultat" )
EditorGadget ( #Message , 3, 65, 355, 80)
SetGadgetText ( #Message , "" )
TextGadget ( #Texte1 , 10, 47, 140, 15, "Message à coder / décoder" )
ButtonGadget ( #Button_7 , 344, 150, 15, 40, "?" )
TextGadget ( #Titre , 2, 0, 365, 45, "Dobro Crypt" , #PB_Text_Border|#PB_Text_Center )
; Gadget Fonts
SetGadgetFont ( #Titre , LoadFont ( #Font_Titre , "Arial Black" , 22, 0))
EndIf
DC_Msg = GetDC_(GadgetID(#Message))
SendMessage_(GadgetID(#Message), #EM_SETTARGETDEVICE, DC_Msg, GadgetWidth(#Message)*14)
ReleaseDC_(GadgetID(#Message), DC_Msg)
EndIf
EndProcedure
OpenWindow_ARS()
;{- Event loop
Repeat
Event = WaitWindowEvent ()
Select Event
; ///////////////////
Case #WM_RBUTTONDOWN
x =WindowMouseX(#ARS) : y =WindowMouseY(#ARS)
If x >= GadgetX(#Message) And x <= GadgetX(#Message)+GadgetWidth(#Message)
If y >= GadgetY(#Message) And y <= GadgetY(#Message)+GadgetHeight(#Message)
DisplayPopupMenu(#PopUp, WindowID(#ARS))
EndIf
EndIf
Case #PB_Event_Menu
Select EventMenu()
Case 0 ; Copier
If GetGadgetText(#Message) <> ""
ClearClipboard() : SetClipboardText(GetGadgetText(#Message))
EndIf
Case 1 ; Coller
SetGadgetText(#Message, ""): SetGadgetText(#Message, GetClipboardText())
EndSelect
Case #PB_Event_Gadget
EventGadget = EventGadget ()
EventType = EventType ()
If EventGadget = #spinGadget ; le spin
EndIf
; ************* encodage *****************************************
If EventGadget = #BT_Coder
Ex$ = ".crypt"
ClearClipboard ()
de= GetGadgetState ( #spinGadget )
RandomSeed (de)
phrase$= GetGadgetText ( #Message )
chaine_codee$= ""
For position_caractere=1 To Len (phrase$)
Caractere$= Mid (phrase$,position_caractere,1)
rd= Random (5)+position_caractere
For cc=0 To 254
If Caractere$= Chr (cc)
chaine_codee$+ Str (rd+cc)+ Chr (255)
Break 1
EndIf
Next cc
Next position_caractere
ClearGadgetItemList ( #Message )
SetGadgetText ( #Message ,chaine_codee$+ Str (de))
phrase$=chaine_codee$+ Str (de)
EndIf
; ******************************************* decodage *******************************
If EventGadget = #BT_Decoder
Ex$ = ".txt"
ClearClipboard ()
phrase$= GetGadgetText ( #Message )
de= Val ( Right (phrase$,1)) ; attention ne lit que le dernier caractere !! : D donc une valeur entre 0 et 9
RandomSeed (de)
phrase$= Left (phrase$, Len (phrase$)-1)
For t=1 To Len ( phrase$)
code= Val ( StringField (phrase$,t, Chr (255)))
rd= Random (5)+t
decode=code-rd
If decode>0
phrase$= ReplaceFirst(phrase$, Str (code), Chr (decode))
EndIf
Next t
phrase$= RemoveString (phrase$, Chr (255))
ClearGadgetItemList ( #Message )
SetGadgetText ( #Message ,phrase$)
EndIf
If EventGadget = #BT_Ouvrir
T$ = OpenFileRequester("Ouvrir un fichier","","Fichiers supportés|*.crypt;*.txt|Fichiers cryptés|*.crypt|Fichiers texte|*.txt", 0)
If T$ : Fichier$ = T$ : T$ = "" : EndIf
If Fichier$
If ReadFile(0, Fichier$)
Size = Lof(0)
*Buffer = AllocateMemory(Size +1)
If *Buffer
ReadData(0, *Buffer, Size)
EndIf
CloseFile(0)
SetGadgetText(#Message, PeekS(*Buffer))
FreeMemory(*Buffer)
EndIf
EndIf
ElseIf EventGadget = #BT_Sauver
T$ = SaveFileRequester("Sauver un fichier","","Fichiers supportés|*.crypt;*.txt|Fichiers cryptés|*.crypt|Fichiers texte|*.txt", 0)
If T$ : Fichier$ = T$ : T$ = "" : EndIf
If GetExtensionPart(Fichier$) = ""
Fichier$ + Ex$
EndIf
Debug Fichier$
Contenu$ = GetGadgetText(#Message) : Size = Len(Contenu$)
*Buffer = AllocateMemory(Size)
PokeS(*Buffer, Contenu$)
If CreateFile(0, Fichier$)
WriteData(0, *Buffer, Size)
CloseFile(0)
EndIf
FreeMemory(*Buffer)
ElseIf EventGadget = #Button_3
SetClipboardText (phrase$)
ClearGadgetItemList ( #Message )
SetGadgetText ( #Message ,phrase$)
ElseIf EventGadget = #Button_7
MessageRequester ( "A propos" , "Dobro Crypt v1" )
EndIf
; ////////////////////////
Case #PB_Event_CloseWindow
EventWindow = EventWindow ()
If EventWindow = #ARS
CloseWindow ( #ARS )
Break
EndIf
EndSelect
ForEver
;
;}
Procedure$ ReplaceFirst(String$, StringToFind$, StringToReplace$)
; de Dri
index = FindString(String$, StringToFind$, 1)
length = Len (String$) - Len (StringToFind$) - index
If index
String$ = Left (String$, index-1) + StringToReplace$ + Right (String$, length+1)
EndIf
ProcedureReturn String$
EndProcedure
Merci, j'avais fais dans mon coin le , retour auto, le changement de l'interface, viré le lcaseChris a écrit :Tiens. Voilà ma version améliorée.
Retour automatique pendant la saisie.
Chargement d'un fichier.
Sauvegarde d'un fichier.
Menu Pop-up sur l'éditeur. (Copier er Coller)
Le zéro, c'est bon. Je lui ai fait crypter des fichiers texte avec des tabulations, des chiffres, des lettres majuscules, des gros fichiers, des petits,... Ca fonctionne dans les deux sens.Dobro a écrit :Merci, j'avais fais dans mon coin le , retour auto, le changement de l'interface, viré le lcaseChris a écrit :Tiens. Voilà ma version améliorée.
Retour automatique pendant la saisie.
Chargement d'un fichier.
Sauvegarde d'un fichier.
Menu Pop-up sur l'éditeur. (Copier er Coller)
je vais réutiliser ton code pour le popup et sauv/charg fichier
Merci ça va le zero ? plus de bleme ?
ça va etre coton de décrypter un code pareil
Code : Tout sélectionner
;/ code par Dobro, modifié par Chris
;/ sur une base de AR-S
;/ algorythme de crypage axé sur le random !!
Enumeration
#ARS
#BT_Coder
#BT_Decoder
#Affiche
#BT_Copie
#Text_4
#Message
#Texte1
#BT_Help
#Titre
#Font_Titre
#spinGadget
#BT_Ouvrir
#BT_Sauver
EndEnumeration
Enumeration
#PopUp
EndEnumeration
#CRLF = Chr(13)+Chr(10)
Global Ex$
Declare ChargeFichier()
Declare CopyToClipboard()
Declare Decode()
Declare Encode()
Declare OpenWindow_ARS()
Declare SauveFichier()
Declare.s ReplaceFirst(String$, StringToFind$, StringToReplace$)
Procedure OpenWindow_ARS()
If OpenWindow (#ARS, 30, 375, 370, 250, "Dobro Crypt" , #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
If CreatePopupMenu(#PopUp)
MenuItem(0, "Copier" + Chr(9) + "Ctrl+C")
MenuItem(1, "Coller" + Chr(9) + "Ctrl+V")
EndIf
If CreateGadgetList(WindowID(#ARS))
TextGadget(#Titre , 5, 5, 360, 45, "Dobro Crypt" , #PB_Text_Border|#PB_Text_Center)
TextGadget(#Texte1 , 5, 55, 140, 15, "Message à coder / décoder")
EditorGadget(#Message , 5, 70, 360, 120)
ButtonGadget(#BT_Coder , 5, 195, 70, 20, "Coder")
ButtonGadget(#BT_Decoder , 80, 195, 70, 20, "Decoder")
ButtonGadget(#BT_Ouvrir, 155, 195, 70, 20, "Ouvrir")
ButtonGadget(#BT_Sauver, 230, 195, 70, 20, "Sauver")
ButtonGadget(#BT_Help, 345, 195, 20, 20, "?")
SpinGadget(#spinGadget, 310, 195, 30, 20, 0, 9, #PB_Spin_ReadOnly|#PB_Spin_Numeric)
SetGadgetText(#spinGadget, "0")
ButtonGadget(#BT_Copie, 5, 225, 360, 20, "Copier le résultat dans le presse papier")
SetGadgetText(#Message, "")
SetGadgetFont(#Titre, LoadFont(#Font_Titre, "Arial Black", 22, 0))
EndIf
DC_Msg = GetDC_(GadgetID(#Message))
SendMessage_(GadgetID(#Message), #EM_SETTARGETDEVICE, DC_Msg, GadgetWidth(#Message)*14)
ReleaseDC_(GadgetID(#Message), DC_Msg)
EndIf
ProcedureReturn WindowID(#ARS)
EndProcedure
Procedure Encode()
ClearClipboard ()
de = GetGadgetState(#spinGadget)
RandomSeed(de)
phrase$ = GetGadgetText(#Message)
chaine_codee$= ""
For position_caractere = 1 To Len(phrase$)
Caractere$ = Mid(phrase$, position_caractere, 1)
rd = Random(5) + position_caractere
For cc = 0 To 254
If Caractere$ = Chr(cc)
chaine_codee$ + Str(rd+cc) + Chr(255)
Break 1
EndIf
Next cc
Next position_caractere
ClearGadgetItemList(#Message)
SetGadgetText(#Message, chaine_codee$ + Str(de))
EndProcedure
Procedure Decode()
ClearClipboard()
phrase$ = GetGadgetText(#Message)
de = Val(Right(phrase$, 1)) ; attention ne lit que le dernier caractere !! : D donc une valeur entre 0 et 9
RandomSeed(de)
phrase$ = Left(phrase$, Len(phrase$) -1)
For t = 1 To Len(phrase$)
code = Val(StringField(phrase$, t, Chr(255)))
rd = Random(5) + t
decode = code - rd
If decode > 0
phrase$ = ReplaceFirst(phrase$, Str(code), Chr(decode))
EndIf
Next t
phrase$ = RemoveString(phrase$, Chr(255))
ClearGadgetItemList(#Message)
SetGadgetText(#Message, phrase$)
EndProcedure
Procedure.s ReplaceFirst(String$, StringToFind$, StringToReplace$)
; de Dri
index = FindString(String$, StringToFind$, 1)
length = Len (String$) - Len (StringToFind$) - index
If index
String$ = Left (String$, index-1) + StringToReplace$ + Right (String$, length+1)
EndIf
ProcedureReturn String$
EndProcedure
Procedure SauveFichier()
T$ = SaveFileRequester("Sauver un fichier","","Fichiers supportés|*.crypt;*.txt|Fichiers cryptés|*.crypt|Fichiers texte|*.txt", 0)
If T$ : Fichier$ = T$ : T$ = "" : EndIf
If GetExtensionPart(Fichier$) = ""
Fichier$ + Ex$
EndIf
Debug Fichier$
Contenu$ = GetGadgetText(#Message) : Size = Len(Contenu$)
*Buffer = AllocateMemory(Size)
PokeS(*Buffer, Contenu$)
If CreateFile(0, Fichier$)
WriteData(0, *Buffer, Size)
CloseFile(0)
EndIf
FreeMemory(*Buffer)
EndProcedure
Procedure ChargeFichier()
T$ = OpenFileRequester("Ouvrir un fichier","","Fichiers supportés|*.crypt;*.txt|Fichiers cryptés|*.crypt|Fichiers texte|*.txt", 0)
If T$ : Fichier$ = T$ : T$ = "" : EndIf
If Fichier$
If ReadFile(0, Fichier$)
Size = Lof(0)
*Buffer = AllocateMemory(Size +1)
If *Buffer
ReadData(0, *Buffer, Size)
EndIf
CloseFile(0)
SetGadgetText(#Message, PeekS(*Buffer))
FreeMemory(*Buffer)
EndIf
EndIf
EndProcedure
Procedure CopyToClipboard()
If GetGadgetText(#Message) <> ""
SetClipboardText(GetGadgetText(#Message))
EndIf
EndProcedure
If OpenWindow_ARS() = 0 : End : EndIf
Repeat
Select WaitWindowEvent ()
Case #WM_RBUTTONDOWN ;{
x =WindowMouseX(#ARS) : y =WindowMouseY(#ARS)
If x >= GadgetX(#Message) And x <= GadgetX(#Message)+GadgetWidth(#Message)
If y >= GadgetY(#Message) And y <= GadgetY(#Message)+GadgetHeight(#Message)
DisplayPopupMenu(#PopUp, WindowID(#ARS))
EndIf
EndIf;}
Case #PB_Event_Menu ;{
Select EventMenu()
Case 0 ; Copier
If GetGadgetText(#Message) <> ""
ClearClipboard() : SetClipboardText(GetGadgetText(#Message))
EndIf
Case 1 ; Coller
SetGadgetText(#Message, ""): SetGadgetText(#Message, GetClipboardText())
EndSelect;}
Case #PB_Event_Gadget
Select EventGadget()
Case #BT_Coder
Ex$ = ".crypt"
Encode()
Case #BT_Decoder
Ex$ = ".txt"
Decode()
Case #BT_Ouvrir
ChargeFichier()
Case #BT_Sauver
SauveFichier()
Case #BT_Copie
CopyToClipboard()
Case #BT_Help
MessageRequester("A propos", "----------- Dobro Crypt v1 -----------" + Chr(10) + "" + Chr(10) + " Codé par Dobro." + Chr(10) + " Modifié par Chris." + Chr(10) + "" + Chr(10) + "", #MB_OK)
EndSelect
Case #PB_Event_CloseWindow
Quit = #True
EndSelect
Until Quit
End
Et pourquoi pas un randomseed(sizeof(Long)) ?Dobro a écrit :dorénavant les clef peuvent aller de 0 a 999999 !!!!