[resolu]ReplaceString.. et encodage de text

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ah!
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
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

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.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

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.
@AR-s : tu n'as pas vu que j'ai fait une version differente de la tienne dans ton topic !!

regarde le listing en couleur pour comprendre, ou relis les topic :D


@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 :D


toutedfois, je regarde cette histoire de 0123456789 :D
Dernière modification par Backup le lun. 27/août/2007 9:24, modifié 1 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

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 :D
J'ai rien envie d'améliorer du tout.

Tu as posté ça, hier :
Dobro a écrit :
Dobro a écrit :ça marche la ? 8O
8O
Je pensai que tu voulais un retour. Tu l'as. Pour le reste fais comme tu veux.

(Pis d'abord, corrige donc le bug du zéro. C'est TON bug, pas le mien.) :mrgreen:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Chris a écrit : J'ai rien envie d'améliorer du tout.

Tu as posté ça, hier :
Dobro a écrit :
Dobro a écrit :ça marche la ? 8O
8O
Je pensai que tu voulais un retour. Tu l'as. Pour le reste fais comme tu veux.

(Pis d'abord, corrige donc le bug du zéro. C'est TON bug, pas le mien.) :mrgreen:
oui ! merci pour le retour !! :D

ça y est le bug du zero est corrigé !! :D
voir listing coloré :) ... Merci

je vais regarder encore un peu les quelque suggestions que tu as fais :D

je voulais simplement te dire, que si tu voulais , tu pouvais l'améliorer
rien d'autre :D a ta guise :D
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

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)

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


Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Chris 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)
Merci, j'avais fais dans mon coin le , retour auto, le changement de l'interface, viré le lcase :D

je vais réutiliser ton code pour le popup et sauv/charg fichier :D

Merci ça va le zero ? plus de bleme ? :)

ça va etre coton de décrypter un code pareil :lol:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Dobro a écrit :
Chris 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)
Merci, j'avais fais dans mon coin le , retour auto, le changement de l'interface, viré le lcase :D

je vais réutiliser ton code pour le popup et sauv/charg fichier :D

Merci ça va le zero ? plus de bleme ? :)

ça va etre coton de décrypter un code pareil :lol:
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.

Sinon, j'ai refait tout le code à "ma sauce". J'ai tout mis dans des procédures, au dessus, et juste l'appel de procédure dans la boucle.
Je sais! Chuis qu'un maniaque. :oops: :lol:


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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bon , je vais adopter ton code :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

j'ai ré-editer le code coloré, parceque j'ai repris ton code, mais en modifiant l'interface ! :D
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Dobro a écrit :j'ai ré-editer le code coloré, parceque j'ai repris ton code, mais en modifiant l'interface ! :D
T'es qu'un sagouin :mrgreen:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

......
Dernière modification par Backup le mar. 19/août/2014 13:24, modifié 2 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Tu plaisantes ou quoi? 8O

Des SpinGadget qui peuvent aller jusqu'à 999999 .... en ReadOnly!

Tu crois qu'on va passer la journée à cliquer sur la flèche, peut-être? :lol:
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Dobro a écrit :dorénavant les clef peuvent aller de 0 a 999999 !!!!
Et pourquoi pas un randomseed(sizeof(Long)) ?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Progi1984 a écrit :
Dobro a écrit :dorénavant les clef peuvent aller de 0 a 999999 !!!!
Et pourquoi pas un randomseed(sizeof(Long)) ?
Il est en plein délire, le Dobro :lol:
Répondre