Lecteur d'images cryptées

Programmation d'applications complexes
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Lecteur d'images cryptées

Message par SPH »

Salut,
Je vous dis tout a propos de mon logiciel. Il s'agit d'un lecteur d'images cryptées.
Ca sert a quoi ?
Tout le monde a des photos tres personnelles qui ne doivent pas etre regardé par les autres. Alors, vous les cryptez grace a mon logiciel et 3 clés (des fichiers). Et pour les regardez, vous entrez les 3 clés et vous utilisez le premier onglet "Lecteur".
Mais bon, j'ai parfois un invalid memory access ici :

Code : Tout sélectionner

      *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
Alors, je suis un peu decouragé...

Code : Tout sélectionner

UseJPEG2000ImageDecoder()
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()

Enumeration
  #Window1
  #Window2
EndEnumeration
Enumeration
  #Panel1
  #Panel2
  #Explorer
#b1  
#b2
#b3  
#b4  
#b5
#b6
#b7
#b8
#b9
#b10
#b11
#b12
#t1
#t2
#t3
#t4
#t5
#t6
#t7
  #ViewImage
  #ImageTmp
  #Image
EndEnumeration
Enumeration
  #Kbd_Add ;Touche de racourci +
  #Kbd_Subtract; Touche de racourci -
  #Kbd_Esc ;Touche de racourci Escape
  #Kbd_PgUp
  #Kbd_PgDown
EndEnumeration

Global Zoom.f=1 ;Facteur de zoom
Global PosFichier ; Fichier dans l'ExplorerListGadget

Declare Pc_ChargerImage()
Declare Pc_AfficherImage()
Declare Pc_ZoomImage(Pas.f)
Declare Pc_ChangerImage(Pas.b)

OpenWindow(#Window1, 0, 0, 500,400, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

PanelGadget(#Panel1, 8, 8, 484, 384)
  AddGadgetItem (#Panel1, -1, "Lecteur")
  ExplorerListGadget(#Explorer, 10, 108, 460, 244, "*.mkey")
  SetGadgetAttribute(#Explorer, #PB_Explorer_List,2)   
  AddGadgetItem (#Panel1, -1,"Cryptage")
  
  PanelGadget (#Panel2, 10, 110, 460, 230)
    AddGadgetItem(#Panel2, -1, "Crypter")
    ButtonGadget(#b7, 20, 30,  72, 24, "Source")
    ButtonGadget(#b8, 20, 65,  72, 24, "Destination")
    StringGadget(#t4,  100, 30, 330, 24, "")
    StringGadget(#t5,  100, 65, 330, 24, "")
    ButtonGadget(#b11, 140, 140,  160, 24, "Crypter")
  
    AddGadgetItem(#Panel2, -1, "Décrypter")
    ButtonGadget(#b9, 20, 30,  72, 24, "Source")
    ButtonGadget(#b10, 20, 65,  72, 24, "Destination")
    StringGadget(#t6,  100, 30, 330, 24, "")
    StringGadget(#t7,  100, 65, 330, 24, "")
    ButtonGadget(#b12, 140, 140,  160, 24, "Décrypter")
    
    CloseGadgetList()
  
  AddGadgetItem (#Panel1, -1, "Clés")
  ButtonGadget(#b1, 20, 120,  72, 24, "Clé rouge")
  ButtonGadget(#b2, 20, 155,  72, 24, "Clé verte")
  ButtonGadget(#b3, 20, 190,  72, 24, "Clé bleue")
  StringGadget(#t1,  100, 120, 300, 24, "")
  StringGadget(#t2,  100, 155, 300, 24, "")
  StringGadget(#t3,  100, 190, 300, 24, "")
  ButtonGadget(#b4, 410, 120,  48, 24, "Eject")
  ButtonGadget(#b5, 410, 155,  48, 24, "Eject")
  ButtonGadget(#b6, 410, 190,  48, 24, "Eject")

  CloseGadgetList()
   
   
Repeat
  Select WaitWindowEvent() 
    Case #PB_Event_Menu
      Select EventMenu()   
        Case #Kbd_Add
          Pc_ZoomImage(0.05)
        Case #Kbd_Subtract
          Pc_ZoomImage(-0.05)
        Case #Kbd_PgUp
          Pc_ChangerImage(-1)
        Case #Kbd_PgDown
          Pc_ChangerImage(1)
          Case #Kbd_Esc
   ;On ferme Window2
   CloseWindow(#Window2)

      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Explorer ; Play
          If EventType() = #PB_EventType_LeftDoubleClick
            PosFichier=GetGadgetState(#Explorer)
            Pc_ChargerImage()
          EndIf
        Case #b1
          cle1$ = OpenFileRequester("Clé rouge", "", "", 0)
          SetGadgetText(#t1, cle1$) ; Get the current item from the ListView..
        Case #b2
          cle2$ = OpenFileRequester("Clé verte", "", "", 0)
          SetGadgetText(#t2, cle2$) ; Get the current item from the ListView..
        Case #b3
          cle3$ = OpenFileRequester("Clé bleue", "", "", 0)
          SetGadgetText(#t3, cle3$) ; Get the current item from the ListView..
        Case #b4
          SetGadgetText(#t1, "") ; Get the current item from the ListView..
        Case #b5
          SetGadgetText(#t2, "") ; Get the current item from the ListView..
        Case #b6
          SetGadgetText(#t3, "") ; Get the current item from the ListView..
        Case #b7
          source$ = PathRequester("Source", "")
          SetGadgetText(#t4, source$) ; Get the current item from the ListView..
        Case #b8
          dest$ = PathRequester("Destination", "")
          SetGadgetText(#t5, dest$) ; Get the current item from the ListView..
        Case #b9
          source2$ = PathRequester("Source", "")
          SetGadgetText(#t6, source2$) ; Get the current item from the ListView..
        Case #b10
          dest2$ = PathRequester("Destination", "")
          SetGadgetText(#t7, dest2$) ; Get the current item from the ListView..
        Case #b11
          If GetGadgetText(#t1)<>"" And GetGadgetText(#t2)<>"" And GetGadgetText(#t3)<>"" And GetGadgetText(#t4)<>"" And GetGadgetText(#t5)<>""
            Gosub cry1
          EndIf
        Case #b12
          If GetGadgetText(#t1)<>"" And GetGadgetText(#t2)<>"" And GetGadgetText(#t3)<>"" And GetGadgetText(#t6)<>"" And GetGadgetText(#t7)<>""
            Gosub decry1
          EndIf
          
      EndSelect 
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window1
          End
        Case #Window2
          CloseWindow(#Window2)
      EndSelect   
  EndSelect
ForEver

Procedure Pc_ChangerImage(Pas.b)
  If GetGadgetItemState(#Explorer,PosFichier+Pas)&1=#PB_Explorer_File
    PosFichier+Pas
    Pc_ChargerImage()
  EndIf
EndProcedure

Procedure Pc_ChargerImage()
  file$=GetGadgetText(#Explorer)+GetGadgetItemText(#Explorer,PosFichier)
  If FileSize(file$)>0
    If ReadFile(1, file$)
      length = Lof(1)                            ; Lit la taille en octets du fichier
      *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
      If *MemoryID
        ReadData(1, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire
        CloseFile(1)
        
        Dim key(6)
        key(1)=PeekB(*MemoryID+length-6)
        If key(1)<0
          key(1)+256
        EndIf
        key(2)=PeekB(*MemoryID+length-5)
        If key(2)<0
          key(2)+256
        EndIf
        key(3)=PeekB(*MemoryID+length-4)
        If key(3)<0
          key(3)+256
        EndIf
        key(4)=PeekB(*MemoryID+length-3)
        If key(4)<0
          key(4)+256
        EndIf
        key(5)=PeekB(*MemoryID+length-2)
        If key(5)<0
          key(5)+256
        EndIf
        key(6)=PeekB(*MemoryID+length-1)
        If key(6)<0
          key(6)+256
        EndIf
;         For i=1 To 6
;           Debug key(i)
;         Next
;         End
rouge$=GetGadgetText(#t1);"d:/mersenne.txt"
verte$=GetGadgetText(#t2);"d:/mersenne.txt"
bleue$=GetGadgetText(#t3);"d:/mersenne.txt"
ReadFile(1,rouge$)
ReadFile(2,verte$)
ReadFile(3,bleue$)
  Dim Leng(3)
Leng(1)=Lof(1)/8
Leng(2)=Lof(2)/8
Leng(3)=Lof(3)/8
        
For i=1 To 3
If key(i*2-1)+key(i*2)>Leng(i)
  FileSeek(i,0)
Else
  FileSeek(i,key(i*2-1)+key(i*2))
EndIf
Next

;length/8
For i=0 To length Step 8
  q.q=PeekQ(*MemoryID+i)
;          Debug q
           For u=1 To 3
           q!ReadQuad(u)
           If Loc(u)>=Leng(u)
             FileSeek(u,0)  
           EndIf
         Next
         PokeQ(*MemoryID+i,q)
Next
;End

        Resultat = CatchImage(#ImageTmp, *MemoryID, length-6)
        If Resultat<>0
          CopyImage(#ImageTmp, #Image)
          ;Zoom à 100%
          Zoom=1
          Pc_AfficherImage()
          ProcedureReturn #True
        EndIf
      EndIf
    EndIf
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure Pc_ZoomImage(Pas.f)
  CopyImage(#ImageTmp, #Image)   
  Zoom+Pas
  SetWindowTitle(#Window2, "MutanteKey - Zoom "+Str(Zoom*100)+" %")
  ;Mise à jour de l'image dans son gadget
  If Zoom>0.1
    ResizeImage(#Image, ImageWidth(#Image)*Zoom, ImageHeight(#Image)*Zoom)
    SetGadgetState(#ViewImage, ImageID(#Image))
    ResizeWindow(#Window2, #PB_Ignore, #PB_Ignore, ImageWidth(#Image), ImageHeight(#Image))
  Else
    Zoom=0.1
  EndIf
EndProcedure

Procedure Pc_AfficherImage()
  If IsWindow(#Window2)=0
    OpenWindow(#Window2, 0, 0, ImageWidth(#Image), ImageHeight(#Image), "MutanteKey");, #PB_Window_BorderLess)
    ;On attache les touches de racourci à la fenetre de visualisation d'une image (#Window2)
    AddKeyboardShortcut(#Window2, #PB_Shortcut_Add, #Kbd_Add)
    AddKeyboardShortcut(#Window2, #PB_Shortcut_Subtract, #Kbd_Subtract)
    AddKeyboardShortcut(#Window2, #PB_Shortcut_Escape, #Kbd_Esc)
    AddKeyboardShortcut(#Window2, #PB_Shortcut_Prior, #Kbd_PgUp)
    AddKeyboardShortcut(#Window2, #PB_Shortcut_Next, #Kbd_PgDown)
  Else
    ResizeWindow(#Window2,0,0,ImageWidth(#Image), ImageHeight(#Image))
  EndIf
  SetWindowTitle(#Window2, "MutanteKey - Zoom 100%")
  ImageGadget(#ViewImage, 0,0,300,200,ImageID(#Image))
EndProcedure


cry1:

Directory$ = GetGadgetText(#t4);"d:\"   ; Énumère le contenu du répertoire C (Les sous-répertoires ne sont pas examinés) 
  If ExamineDirectory(0, Directory$, "*.*")  
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        file$=directory$+DirectoryEntryName(0)
        ext$=Right(file$,4)
        If ext$=".bmp" Or ext$=".jpg" Or ext$="jpeg" Or ext$=".png" Or ext$=".tga" Or ext$="tiff"
          Gosub cry          
        EndIf
      EndIf
      
    Wend
    FinishDirectory(0)
  EndIf
Return
    
 cry:         
rouge$=GetGadgetText(#t1);"d:/mersenne.txt"
verte$=GetGadgetText(#t2);"d:/mersenne.txt"
bleue$=GetGadgetText(#t3);"d:/mersenne.txt"
ReadFile(1,rouge$)
ReadFile(2,verte$)
ReadFile(3,bleue$)
  Dim Leng(3)
Leng(1)=Lof(1)/8
Leng(2)=Lof(2)/8
Leng(3)=Lof(3)/8

Dim key(6)
For i=1 To 6
  key(i)=Random(255)
Next
;Debug key(1)+key(2)
For i=1 To 3
If key(i*2-1)+key(i*2)>Leng(i)
  FileSeek(i,0)
Else
  FileSeek(i,key(i*2-1)+key(i*2))
EndIf
Next

Debug file$
    If ReadFile(0, file$) 
      len=Lof(0)
      length = Len/8
      Dim p.q(length)
      Dim p2.b(8)
      For i=0 To length-1
        p(i)=ReadQuad(0)
         For u=1 To 3
           p(i)!ReadQuad(u)
           If Loc(u)>=Leng(u)
             FileSeek(u,0)  
           EndIf
         Next

      Next
      For i=1 To Len-length*8
        p2(i)=ReadByte(0)
      Next
      
    EndIf
       CloseFile(0)
       CloseFile(1)
       CloseFile(2)
       CloseFile(3)
  
CreateFile(0, GetGadgetText(#t5)+DirectoryEntryName(0)+".Mkey")
For i=0 To length-1
  WriteQuad(0,p(i))
Next
For i=1 To Len-length*8
  WriteByte(0,p2(i))  
Next
For i=1 To 6
  WriteByte(0,key(i))  
Next

Return








decry1:
Directory$ = GetGadgetText(#t6);"d:\"   ; Énumère le contenu du répertoire C (Les sous-répertoires ne sont pas examinés) 
If ExamineDirectory(0, Directory$, "*.*")  
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        file$=directory$+DirectoryEntryName(0)
        ext$=Right(file$,5)
        If ext$=".Mkey"
          Gosub decry          
        EndIf
      EndIf
      
    Wend
    FinishDirectory(0)
  EndIf
  
Return
    
decry:         
rouge$=GetGadgetText(#t1);"d:/mersenne.txt"
verte$=GetGadgetText(#t2);"d:/mersenne.txt"
bleue$=GetGadgetText(#t3);"d:/mersenne.txt"
ReadFile(1,rouge$)
ReadFile(2,verte$)
ReadFile(3,bleue$)
  Dim Leng(3)
Leng(1)=Lof(1)/8
Leng(2)=Lof(2)/8
Leng(3)=Lof(3)/8

Dim key(6)
;Debug file$
ReadFile(0, file$)
FileSeek(0,Lof(0)-6)
For i=1 To 6
  key(i)=ReadByte(0)
  If key(i)<0
    key(i)+256  
  EndIf
Next
FileSeek(0,0)

For i=1 To 3
If key(i*2-1)+key(i*2)>Leng(i)
  FileSeek(i,0)
Else
  FileSeek(i,key(i*2-1)+key(i*2))
EndIf
Next

If ReadFile(0, file$) 
      len=Lof(0)-6
      length = Len/8
      Dim p.q(length)
      Dim p2.b(8)
      For i=0 To length-1
        p(i)=ReadQuad(0)
         For u=1 To 3
           p(i)!ReadQuad(u)
           If Loc(u)>=Leng(u)
             FileSeek(u,0)  
           EndIf
         Next

      Next
      For i=1 To Len-length*8
        p2(i)=ReadByte(0)
      Next
      
    EndIf
       CloseFile(0)
       CloseFile(1)
       CloseFile(2)
       CloseFile(3)
  
  
       a$=Left(DirectoryEntryName(0),Len( DirectoryEntryName(0))-5)
       
CreateFile(0, GetGadgetText(#t7)+a$)
For i=0 To length-1
  WriteQuad(0,p(i))
Next
For i=1 To Len-length*8
  WriteByte(0,p2(i))  
Next

Return

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Lecteur d'images cryptées

Message par lepiaf31 »

Bah en fait j'en avait déjà codé un :P
(Attention à ne tester qu'avec de petites images car l'algo de cryptage est lent ..):
http://lp.creation.free.fr/Picture%20Encryptor.zip

Voilà ce que ca donne:

image de base:
Image

cryptée (mot de passe: coucou):
Image

décryptée:
Image
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Lecteur d'images cryptées

Message par SPH »

Moi, les mots de passes sont des fichiers, donc un mot de passe géant.

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lecteur d'images cryptées

Message par Ar-S »

ô le gros soufflé qui vient de retomber !
C’était ça ton " idée de fou" ? :?

Il est bien plus pratique de crypter un morceau de partition du DD (avec truecrypt par exemple) et d'y mettre ce que tu veux dedans...
~~~~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
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Lecteur d'images cryptées

Message par G-Rom »

AR-S +1 , C'est clair...
invente l'eau en poudre , tu vas faire fureur :mrgreen:
Tête inerte à charge creuse :mrgreen:
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Lecteur d'images cryptées

Message par SPH »

Je suis sur que c'est une bonne idee :idea:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Lecteur d'images cryptées

Message par TazNormand »

t'avais pas bien cherché sur le net, on dirait : http://www.xlinksoft.com/picture-encryption/
Image
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lecteur d'images cryptées

Message par Backup »

il a pas non plus cherché sur le forum :roll:

http://www.purebasic.fr/french/viewtopi ... pt&start=0

et il y en a d'autre sur le forum ...
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lecteur d'images cryptées

Message par Ar-S »

A défaut de te rendre riche, ça te fera avancer en PB, ce qui est déjà bien :wink:
~~~~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
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Lecteur d'images cryptées

Message par djes »

C'est pas parce que ça a déjà été fait que c'est nul : si le soft est bien fait, il prendra le pas sur les autres. Et c'est vrai que ça répond à un besoin. Donc... Continue! Pour ton bug, un petit coup de débogueur en pas en pas devrait te permettre d'isoler le problème.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lecteur d'images cryptées

Message par Backup »

d'un autre coté , personne n'as dit que c'etait nul ...
c'est facile de lancer des polemiques sur des phantasmes ... :roll:
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Lecteur d'images cryptées

Message par djes »

Dobro a écrit :d'un autre coté , personne n'as dit que c'etait nul ...
c'est facile de lancer des polemiques sur des phantasmes ... :roll:
Arrête de me chercher, je ne t'ai rien fait ! Et fantasme c'est un avec un " f ".
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Lecteur d'images cryptées

Message par TazNormand »

Rhôôô Punaise, Dobro arrête s'il te plaît, c'est pas parce que tu as un problème avec Djes qu'il faut balancer des "piquettes" sans arrêt.

Même si Djes s'est planté (c'est vrai que personne n'a dit que c'était nul, Djes !), ça sert à rien de chercher la m....

Je sais que je n'ai pas de conseil à te donner, ou que les conseilleurs ne sont pas ... mais le fofo français part déjà à vaux-l'eau donc (comme pour le café maxwell) : ce n'est pas la peine d'en rajouter.

Pour chaque topic du forum, à chaque fois il y a un post qui fout la zone ; je ne dis pas que c'est toi systématiquement, n'interprètes pas mal mes propos, mais on peut pas dire que l'ambiance soit des plus folichonnes en ce moment.

Donc on arrête tous les conneries, on mets TOUS nos susceptibilités de côté, on se sert la main et on vit chacun avec les différences des autres.

@ SPH : désolé de polluer un peu ton topic, néanmoins, continues car même si des logiciels existent déjà rien n'empêchent d'en faire d'autres, mieux ou pas, j'aime mieux avoir plusieurs choix, que d'avoir un soft unique mais inadapté à mes besoins.

Sur ce, bon après-midi à tous
Image
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Lecteur d'images cryptées

Message par Backup »

djes a écrit :Et fantasme c'est un avec un " f ".
:lol: :roll:

extrait de wikipedia
Le nom phantasme vient du grec phantasma qui signifie apparition, fantôme, hallucination visuelle et qui est dérivé de phainein signifiant rendre visible, faire briller. Les dictionnaires français actuels, renvoient pour sa définition au mot Fantasme avec un F, car cette orthographe plus moderne est plus utilisée que Phantasme. 1.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Lecteur d'images cryptées

Message par djes »

Au temps pour moi.
Tu m'énerves !
Répondre