Re: [défis] Steganographie - le retour
Publié : ven. 05/juil./2019 18:18
la cryptologie est un vaste monde
il y a autant de possibilité que l'imagination
il y a autant de possibilité que l'imagination
Forums PureBasic - Français
https://www.purebasic.fr/french/
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
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
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
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
Code : Tout sélectionner
StockPixelTab(0)
Dessine(1)