Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Basic > PureBasic
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/03/2011, 19h46   #1
Responsable Purebasic
 
Avatar de comtois
 
Inscription : avril 2003
Messages : 810
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 810
Points : 1 856
Points : 1 856
Par défaut Crypter une image avec l'algo AES

Rien d'extraordinaire, j'ai juste repris l'exemple de la doc et je l'ai adapté pour encoder une image plutôt qu'une chaine de caractères.

-Dans un premier temps vous devrez choisir une image au format png.
-Ensuite donner un nom pour sauvegarder l'image encodée.
-Et enfin ouvrir le fichier que vous venez de sauvegarder pour le décoder et l'afficher dans une fenêtre.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
;Sélectionne une image (PNG car je n'ai mis que le décodeur PNG)
file$ = OpenFileRequester("Sélectionnez un fichier","","Image (.png)|*.png|All files (*.*)|*.*",0)
If file$
  If ReadFile(0, file$) 
    length = Lof(0)                            ; Lit la taille en octets du fichier 
    *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
    If *MemoryID
      bytes = ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
      Debug "Nombre d'octets lus: " + Str(bytes)
    EndIf
    CloseFile(0)
  EndIf
EndIf
 
;Encode l'image (je ne sais pas si je fais correctement les choses, j'ai juste repris l'exemple de la doc et légèrement adapté 
 
*CipheredImage   = AllocateMemory(MemorySize(*MemoryID))
 
If AESEncoder(*MemoryID, *CipheredImage, MemorySize(*MemoryID), ?Key, 128, ?InitializationVector)
  ;Enregistre l'image codée
  file$ = SaveFileRequester("Sélectionnez un fichier","","Image (.png)|*.png|All files (*.*)|*.*",0)
  If file$
    If CreateFile(0, file$) 
 
 
      WriteData(0, *CipheredImage, MemorySize(*CipheredImage)) 
 
      CloseFile(0)
    EndIf
  EndIf
 
EndIf
 
;Sélectionner ici l'image enregistrée précédemment
file$ = OpenFileRequester("Sélectionnez un fichier","","Image (.png)|*.png|All files (*.*)|*.*",0)
If file$
  If ReadFile(0, file$) 
    length = Lof(0)                            ; Lit la taille en octets du fichier 
    *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
    If *MemoryID
      bytes = ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
      Debug "Nombre d'octets lus: " + Str(bytes)
    EndIf
    CloseFile(0)
  EndIf
EndIf
 
*DecipheredImage   = AllocateMemory(MemorySize(*MemoryID))
 
;Décode l'image
 
If AESDecoder(*MemoryID, *DecipheredImage, MemorySize(*MemoryID), ?Key, 128, ?InitializationVector)
 
  ;Et on affiche le résultat pour vérifier qu'on récupère bien notre image
  If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")
 
    UsePNGImageDecoder()
    CatchImage(0, *DecipheredImage)
 
    Repeat
      EventID = WaitWindowEvent()
 
      If EventID = #PB_Event_Repaint
        StartDrawing(WindowOutput(0))
        DrawImage(ImageID(0), 0, 0)
 
        StopDrawing()    
      EndIf
 
    Until EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
 
  EndIf
 
 
EndIf
 
 
DataSection
  Key:
  Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
 
  InitializationVector:
  Data.b $3d, $af, $ba, $42, $9d, $9e, $b4, $30, $b4, $22, $da, $80, $2c, $9f, $ac, $41
EndDataSection
__________________
Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP.
comtois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 19h37   #2
Candidat au titre de Membre du Club
 
Inscription : avril 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 46
Points : 14
Points : 14
super, je recherchais justement ce genre d'informations en ce moment !

Ca me fera une piste en plus .

Merci.

question : dans data section, key, c'est la clef ? on peut le changer ?
blendman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2011, 21h09   #3
Responsable Purebasic
 
Avatar de comtois
 
Inscription : avril 2003
Messages : 810
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 810
Points : 1 856
Points : 1 856
oui tu peux changer la clé. Dans cet exemple elle fait 128 bits, mais tu peux changer la ligne suivante et remplacer 128 par 192 ou 256. Et bien sûr ajouter les bits supplémentaires dans ta clé.

Code :
AESEncoder(*MemoryID, *CipheredImage, MemorySize(*MemoryID), ?Key, 128, ?InitializationVector)
Dans l'exemple la clé fait 16 octets (Data.b pour byte (octet)), un octet fait 8 bits soit 16*8 = 128 bits.
Code :
1
2
 Key:
  Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
__________________
Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP.
comtois est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h15.


 
 
 
 
Partenaires

Hébergement Web