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