Page 2 sur 2

Re: [défis] Steganographie - le retour

Publié : ven. 05/juil./2019 18:18
par Zorro
la cryptologie est un vaste monde :)
il y a autant de possibilité que l'imagination :)

Re: [défis] Steganographie - le retour [RESOLU]

Publié : ven. 05/juil./2019 19:41
par venom
Bravo Dobro 8)
Et merci Ar-S pour l'explication.
PS: et le code pour l'encodage il y a moyen de le voir ? :lol:






@++

Re: [défis] Steganographie - le retour [RESOLU]

Publié : ven. 05/juil./2019 21:34
par Ar-S
Pas de soucis.
Voilà le code sans ma GUI perso.. Tu as toutes les proces et j'ai ajouté les commentaires.
Ma prochaine mouture sera plus complexe, de la vraie stégano qui ne devrait pas être violable. (du moins sans l'exe de décryption)


;Initialisation

Code : Tout sélectionner

; By Ar-S 29/06/2019

UseJPEGImageDecoder()
UsePNGImageEncoder()
UsePNGImageDecoder()

Declare StockPixelTab(IMG)
Declare  Dessine(IMG)
Declare.s Hex2Car(HEXASTRING$)

Global DimX, DimY
Global T$ = "Rebonjour les pures, est-ce aussi facile cette fois?"
Global LT = Len (T$)
Global NewList CarVal.s()

If Not LoadImage(0,"bgc.jpg",0)
  Debug "Erreur, pas de fichier"
  End
Else
  DimX = ImageWidth(0)
  DimY = ImageHeight(0)
  Global Dim TabPixel(1,1)
  CreateImage(1,DimX, DimY,24)

EndIf

;1er étape
J'ai d'abord créé une liste dans lequel j'affiche les car en HEXA.

Code : Tout sélectionner

For i = 1 To LT
  V = Asc( Mid(T$,i,1) ) ; Je prends chaque caractère
  V$ = RSet(Hex(V), 2, "0") ; et j'affiche leur valeur HEX en ajoutant un 0 si besoin pour que chaque valeur ait 2 chiffres. (la même chose que vous faisiez en binaire avec du rset 8 pour l'octect
    Debug Mid(T$,i,1) + " => V$ : " + V$

    For j = 1 To 2
    AddElement( CarVal() ) ; ICI on enregistre les 2 valeurs d'un caractère dans la liste chainée.
    CarVal() = Mid(V$,j,1)
    Next j
Next

2eme étape

Code : Tout sélectionner

; Petite proce maison pour simplifier l'affichage à la fin
Procedure.s Hex2Car(HEXASTRING$)
  ProcedureReturn Chr (Val ("$" + HEXASTRING$))
EndProcedure

; Ici la procédure classique pour stocker les couleurs des pixels dans un tableau, mais en HEX
Procedure StockPixelTab(IMG)

  Dim TabPixel(DimX, DimY)

  StartDrawing(ImageOutput(IMG))
  
  For y = 0 To DimY-1
    For x = 0 To DimX-1
      
      COLhexa$ = Hex (Point (x,y))
      TabPixel(x,y) = Point (x,y)

    Next x
  Next y      
  
  StopDrawing()

EndProcedure

3 eme étape, on déssine la nouvelle image avec plein de debug pour bien voir ce qu'il se passe

Code : Tout sélectionner

Procedure Dessine(IMG)
  
  Count = 0
 
  SelectElement( CarVal(), 0)
  
   StartDrawing(ImageOutput(IMG))
  
  For y = 0 To DimY-1
    For x = 0 To DimX-1
      
      Color = TabPixel(x,y)
      
; On prend les valeurs HEX des composantes rouges et vertes en Hexa en ajoutant le 0 s'il y a qu'une seule valeur
      R$ =  RSet (Hex (Red(Color)),2,"0")
      G$ =  RSet (Hex (Green(Color)),2,"0")
      ; et on prend les valeurs classiques.. Pour plus tard lorsqu'il ni aura plus de car à implanter
      R = Red(color)
      G = Green(Color)
      B = Blue(Color)
      
      ; Le 1er pixel, composant bleu pour chopper le nbr de car. Cette méthode est simpliste et ne marchera que si l'on ne dépasse pas $FF caractères, attention donc ;) 
      If count = 0
        B = LT
      count+1
      
     ElseIf Count >= 1 And Count < (LT*2) +1

          Rn$ = Left(R$,1) + CarVal()
          ;TEST
          CC$ = CarVal()
          NextElement( CarVal() )
          Gn$ = Left(G$,1) + CarVal()
          CC$ + CarVal()
          NextElement( CarVal() )
         
  ; Paie ta vérif :D 
          Debug "Rouge ORI R$ : " + R$
          Debug "Rouge Crypt Rn$ : " + Rn$
          Debug "Vert ORI G$ : " + G$
          Debug "Vert Crypt Gn$ : " + Gn$
          Debug "CAR$ : " + Rn$+Gn$
         
          
          R = Val("$" + Rn$)
          G = Val("$" + Gn$)
          
          Debug "REPONSE : " + Hex2Car(CC$)
          Debug ""
          
          count+1
;         Next
        
      EndIf
      
      Color = RGB(R,G,B)
     
      Plot(x,y, Color )
      count+1
    Next x
  Next y      

  StopDrawing()

EndProcedure
On execute le code ainsi :

Code : Tout sélectionner

StockPixelTab(0)
Dessine(1)
Voilou.
Le décode est au dessus donc pas la peine d'en rajouter.