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

Programmation d'applications complexes
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: [défis] Steganographie - le retour

Message par Zorro »

la cryptologie est un vaste monde :)
il y a autant de possibilité que l'imagination :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
venom
Messages : 3072
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

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

Message 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:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre