Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| PanoCrypt | |
| | Auteur | Message |
---|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: PanoCrypt Mar 12 Oct 2021 - 1:54 | |
| AVERTISSEMENT : PanoCrypt fonctionne avec l’objet MEMO et ne peut traiter que du texte brut.
Ne coller pas de texte provenant d’un traitement de texte (Word, Writer, WordPad…). Lors de la copie, le presse-papier embarque avec lui une foule de séquences de contrôle non visibles (taille et police de caractère, saut de page, saut de colonne…) qui pourrait provoquer le dysfonctionnement du programme. Bonjour à tous ! Suite à l’article de PanoCrypt Lite que vous trouverez en cliquant >> ici <<, voici la version de PanoCrypt avec la possibilité d’ajouter un mot de passe. PanoCrypt est un programme qui permet d’enregistrer un document texte sous forme de fichier image BMP. Ce document texte devient donc totalement illisible. Etant donné que c’est un fichier BMP, on ne se doute pas qu’il y a un texte codé à l’intérieur de l’image. Dans cette nouvelle version de PanoCrypt, avant l’enregistrement de votre texte, vous pouvez spécifier un mot de passe qui cryptera l’enregistrement. Le mot de passe est facultatif mais il permet de renforcer la confidentialité du document. Lors du chargement d’un fichier, si un mot de passe a été utilisé pour l’enregistrer, ce même mot de passe devra être de nouveau renseigné pour décrypter le texte. Le mot de passe est sensible à la casse. Description du bandeau de commande en partant de la gauche :
- 1ère icône : Nouveau document. Crée un nouveau document à crypter. - 2ème icône : Ouvrir un fichier PanoCrypt. Permet d’ouvrir un fichier stocké sur un disque dur ou une clé USB. - 3ème icône : Enregistrer le document en cours. - 4ème icône : Permet de visualiser l’image créée par le cryptage du texte. - Mot de passe : avant l’enregistrement, vous pouvez spécifier un mot de passe. Dans ce cas, ce mot de passe sera obligatoire pour pouvoir relire le fichier. - Le pictogramme Œil : Cliquez dessus pour afficher ou cacher le mot de passe. - 5ème icône : Copier. Copie tout le texte dans le presse-papier. - 6ème icône : Coller. Remplace le texte existant par le contenu du presse-papier. - 7ème icone : Efface le contenu du presse-papier. - Code:
-
' PanoCrypt ' Marc - octobre 2021
dim nomFichier$, Modif$, reponseUtilisateur%, flagMdP%
label nouveau, ouvrir, enregistrer, renduVisuel, modification, fermerRenduVisuel, redim, afficherMdP, quitter label copier, coller, viderPressePapier
interfaceUtilisateur() set_focus 10
end
nouveau: subNouveau() return
sub subNouveau() hide 20 if modif$ = "*" and text$(10) <> "" reponseUtilisateur% = message_warning_yes_no("Voulez-vous enregistrer le travail en cours ?") if reponseUtilisateur% = 0 exit_sub else if reponseUtilisateur% = 1 subEnregistrer() end_if end_if end_if off_change 10 modif$ = "" nomFichier$ = "Fichier sans nom" caption 30,nomFichier$ + modif$ clear 10 color 21,255,255,255 on_change 10,modification end_sub
ouvrir: subOuvrir() return
sub subOuvrir() dim_local enteteFichier%(25), l%, h% hide 20
if modif$ = "*" and text$(10) <> "" reponseUtilisateur% = message_warning_yes_no("Voulez-vous enregistrer le travail en cours ?") if reponseUtilisateur% = 0 exit_sub else if reponseUtilisateur% = 1 subEnregistrer() end_if end_if end_if
off_change 10 clear 10 modif$ = "" nomFichier$ = "Fichier sans nom" caption 30,nomFichier$ + modif$ if object_exists(27) = 0 open_dialog 27 end_if filter 27,"Fichier PanoCrypt|*.bmp" nomFichier$ = file_name$(27) IF nomFichier$ = "_" exit_sub end_if
' lecture entête fichier filebin_open_read 28,nomFichier$ filebin_block_read 28,25,enteteFichier%(0) filebin_close 28
' vérification de la conformité du fichier if enteteFichier%(0) <> 66 and enteteFichier%(1) <> 77 MessageFichierCorrompu() exit_sub end_if
l% = hex(hex$(enteteFichier%(21)) + hex$(enteteFichier%(20)) + hex$(enteteFichier%(19)) + hex$(enteteFichier%(18))) h% = hex(hex$(enteteFichier%(25)) + hex$(enteteFichier%(24)) + hex$(enteteFichier%(23)) + hex$(enteteFichier%(22)))
if l% <> h% MessageFichierCorrompu() exit_sub end_if
width 21,l% height 21,h% file_load 21,nomFichier$ if text$(12) = "" decryptage(l%) else decryptage2(l%) end_if
caption 30,nomFichier$ + modif$ on_change 10,modification end_sub
sub decryptage(largeur%) dim_local x%, y%, caractere$, texte$
for y% = 0 to largeur% - 1 for x% = 0 to largeur% - 1 texte$ = texte$ + chr$(color_pixel_red(21,x%,y%)) texte$ = texte$ + chr$(color_pixel_green(21,x%,y%)) texte$ = texte$ + chr$(color_pixel_blue(21,x%,y%)) next x% next y%
text 10,texte$ end_sub
sub decryptage2(dimCarre%) dim_local x%, y%, caractere$, texte$, cleH$, o1%,o2%,o3% cleH$ = genererCleCryptage$(text$(12)) o1% = hex(left$(cleH$,2)) o2% = hex(mid$(cleH$,3,2)) o3% = hex(right$(cleH$,2)) for y% = 0 to dimCarre% - 1 for x% = 0 to dimCarre% - 1 texte$ = texte$ + chr$(bin_xor(color_pixel_red(21,x%,y%),o1%)) texte$ = texte$ + chr$(bin_xor(color_pixel_green(21,x%,y%),o2%)) texte$ = texte$ + chr$(bin_xor(color_pixel_blue(21,x%,y%),o3%)) next x% next y%
text 10,texte$ end_sub
sub MessageFichierCorrompu() if message_error_ok("PanoCrypt ne peut pas ouvrir ce fichier !") < 3 end_if end_sub
enregistrer: subEnregistrer() return
sub subEnregistrer() dim_local b$, longueurnomFichier%, pos%, n% hide 20
if text$(10) = "" exit_sub end_if
if object_exists(26) = 0 save_dialog 26 end_if
filter 26,"Fichier PanoCrypt|*.bmp" ' dir_dialog 26, ' file_dialog 26, nomFichier$ = file_name$(26)
if nomFichier$ = "_" or nomFichier$ = "" exit_sub end_if
if file_exists(nomFichier$) = 1 if message_confirmation_yes_no("Le fichier existe. Le remplacer ?") <> 1 THEN EXIT_SUB end_if b$=upper$(nomFichier$) if file_extract_extension$(b$) <> ".BMP" if file_extract_extension$(b$) <> "" longueurnomFichier% = len(nomFichier$) pos% = instr_right(nomFichier$,".") n% = longueurnomFichier% - pos% nomFichier$ = left$(nomFichier$,n%) end_if nomFichier$ = nomFichier$ + ".bmp" end_if
if text$(12) = "" encryptage() else encryptage2() end_if file_save 21,nomFichier$ modif$ = "" caption 30,nomFichier$ + modif$ end_sub
sub encryptage() dim_local texte$, longueurTexte%, carre%, complement%, x%,y%, r%,v%,b%,n%, caractere$ inactive 0 texte$ = text$(10) ' longueur du texte à chiffrer longueurTexte% = len(texte$) carre% = int(sqr((longueurTexte%+2)/3)) : ' Klaus if (carre%*carre%) < longueurTexte%/3 : ' *** KLaus carre% = carre% + 1 end_if : ' *** Klaus complement% = (carre%*carre%*3)-longueurTexte% if complement%>0 then texte$ = texte$ + string$(complement%,chr$(32)) : ' *** Klaus height 21,carre% width 21,carre%
if carre% < width_client(20) top 21,(height_client(20) - carre%) / 2 left 21,(width_client(20) - carre%) / 2 end_if
2d_target_is 21 n% = 1 for y% = 0 to carre% - 1 for x% = 0 to carre% - 1 caractere$ = mid$(texte$,n%,1) r% = asc(caractere$) n% = n% + 1 caractere$ = mid$(texte$,n%,1) v% = asc(caractere$) n% = n% + 1 caractere$ = mid$(texte$,n%,1) b% = asc(caractere$) n% = n% + 1 2d_pen_color r%,v%,b% 2d_point x%,y% next x% next y% active 0 end_sub
sub encryptage2() dim_local texte$, longueurTexte%, carre%, complement%, x%,y%, r%,v%,b%,n%, caractere$, cleH$, O1%, o2%, o3% inactive 0 cleH$ = genererCleCryptage$(text$(12)) o1% = hex(left$(cleH$,2)) o2% = hex(mid$(cleH$,3,2)) o3% = hex(right$(cleH$,2)) texte$ = text$(10) ' longueur du texte à chiffrer longueurTexte% = len(texte$) carre% = int(sqr((longueurTexte%+2)/3)) : ' Klaus if (carre%*carre%) < longueurTexte%/3 : ' *** KLaus carre% = carre% + 1 end_if : ' *** Klaus complement% = (carre%*carre%*3)-longueurTexte% if complement%>0 then texte$ = texte$ + string$(complement%,chr$(32)) : ' *** Klaus height 21,carre% width 21,carre%
if carre% < width_client(20) top 21,(height_client(20) - carre%) / 2 left 21,(width_client(20) - carre%) / 2 end_if
2d_target_is 21 n% = 1
for y% = 0 to carre% - 1 for x% = 0 to carre% - 1 caractere$ = mid$(texte$,n%,1) r% = bin_xor(asc(caractere$),o1%) n% = n% + 1 caractere$ = mid$(texte$,n%,1) v% = bin_xor(asc(caractere$),o2%) n% = n% + 1 caractere$ = mid$(texte$,n%,1) b% = bin_xor(asc(caractere$),o3%) n% = n% + 1 2d_pen_color r%,v%,b% 2d_point x%,y% next x% next y%
active 0 end_sub
fnc genererCleCryptage$(mdp$) dim_local cle24Bits, cleHexa$, c$, p%, i%, j%, t$
for i% = 1 to len(mdp$) c$ = mid$(mdp$,i%,1) t$ = t$ + hex$(asc(c$)) next i%
p% = 1 cle24Bits = hex("e959e3")
for i% = len(t$) to 1 step -2 c$ = mid$(t$,p%,2) cle24Bits = bin_xor(cle24Bits,hex(c$)) p% = P% + 2 for j% = 0 to 7 if bin_and(cle24Bits,hex("000001")) = 1 cle24Bits = bin_xor(int(cle24Bits/2),hex("5D6DCB")) else cle24Bits = int(cle24Bits/2) end_if next j% next i%
cleHexa$ = hex$(cle24Bits)
while len(cleHexa$) < 6 cleHexa$ = "0" + cleHexa$ end_while
result cleHexa$ end_fnc
modification: hide 20 if modif$ = "*" return else modif$ = "*" end_if if nomFichier$ = "" nomFichier$ = "Fichier sans nom" end_if
caption 30,nomFichier$ + modif$ return
sub interfaceUtilisateur() creerFenetrePrincipale() creerBarreIcones() creerMemo() creerBarreEtat() creerFenetreRenduVisuel() creerMenuPop() end_sub
sub creerFenetrePrincipale() width 0,width(0) - width_client(0) + 900 height 0,height(0) - height_client(0) + 665 left 0,(screen_x - width(0)) / 2 top 0,(screen_y - height(0)) / 2 color 0,30,30,30 font_size 0,12 caption 0,"PanoCrypt" on_resize 0,redim on_close 0,quitter on_click 0,fermerRenduVisuel end_sub
sub creerMemo() memo 10 top 10,44 left 10,8 width 10,884 height 10,595 bar_both 10 color 10,248,238,208 font_color 10,0,0,80 on_change 10,modification end_sub
sub creerBarreIcones() creerIconeNouveauProjet(8,8) creerIconeOuvrir(44,8) creerIconeSauvegarderProjet(80,8) creerIconeRenduVisuel(116,8) creerZoneMotDePasse(163,8) creerIconeCopier(420,8) creerIconeColler(456,8) creerIconeViderPressePapier(492,8) end_sub
sub creerIconeNouveauProjet(x%,y%) dim_local i% picture 2 height 2,28 width 2,28 top 2,y% left 2,x% 2d_target_is 2 dessinerFondIcone() 2d_pen_color 0,0,0 2d_line 7,5,7,23 2d_line 7,22,21,22 2d_line 7,5,16,5 2d_line 15,5,21,11 2d_line 20,10,20,23 for i% = 6 to 21 2d_flood 8,i%,255,255,255 next i% 2d_line 15,5,15,11 2d_line 15,10,21,10 cursor_point 2 hint 2,"Nouveau cryptage" on_click 2,nouveau end_sub
sub creerIconeOuvrir(x%,y%) dim_local i% picture 3 height 3,28 width 3,28 top 3,y% left 3,x% 2d_target_is 3 dessinerFondIcone() 2d_pen_color 0,0,0 2d_line 16,4,20,4 2d_point 15,5 2d_point 20,5 2d_point 21,6 2d_line 20,7,23,7 2d_line 22,5,22,8 2d_line 5,9,11,9 2d_line 10,11,21,11 2d_line 11,16,25,16 2d_line 5,22,19,22 2d_line 5,9,5,23 2d_line 10,9,10,12 2d_line 20,11,20,17 2d_line 5,22,12,15 2d_line 18,22,25,15 for i% = 10 to 20 2d_flood 6,i%,255,255,255 next i% for i% = 17 to 21 2d_flood 11,i%,250,250,0 next i% cursor_point 3 hint 3,"Ouvrir un fichier PanoCrypt" on_click 3,ouvrir end_sub
sub creerIconeSauvegarderProjet(x%,y%) dim_local i% picture 4 height 4,28 width 4,28 top 4,y% left 4,x% 2d_target_is 4 dessinerFondIcone() 2d_pen_color 0,0,0 2d_line 7,5,20,5 2d_line 19,6,21,6 2d_line 20,7,22,7 2d_line 7,22,21,22 2d_line 6,6,6,22 2d_line 21,7,21,22 for i% = 6 to 21 2d_flood 8,i%,0,255,0 next i% 2d_rectangle 8,14,20,21 2d_line 10,16,18,16 2d_line 10,18,18,18 2d_rectangle 9,5,18,10 2d_line 9,6,15,6 2d_line 9,7,15,7 2d_line 9,8,15,8 cursor_point 4 hint 4,"Enregistrer" on_click 4,enregistrer end_sub
sub creerIconeRenduVisuel(x%,y%) picture 5 height 5,28 width 5,28 top 5,y% left 5,x% 2d_target_is 5 dessinerFondIcone() 2d_pen_color 77,62,35 2d_line 10,4,0,23 2d_line 10,4,20,23 2d_line 18,9,15,14 2d_line 18,9,25,22 2d_rectangle 22,4,24,8 2d_rectangle 21,5,25,7 2d_pen_color 255,255,255 2d_line 18,10,18,13 2d_line 17,12,20,12 2d_fill_color 255,255,255 2d_rectangle 9,7,12,13 2d_line 8,9,8,13 2d_line 10,5,10,7 2d_point 7,11 2d_point 13,11 2d_line 12,9,12,13 2d_pen_color 0,200,0 2d_point 7,12 2d_point 13,12 2d_line 6,13,15,13 2d_line 6,14,15,14 2d_line 5,15,16,15 2d_line 5,16,16,16 2d_line 4,17,17,17 2d_line 4,18,17,18 2d_line 3,19,18,19 2d_line 3,20,18,20 2d_line 2,21,19,21 2d_line 2,22,19,22 2d_pen_color 0,150,0 2d_line 17,13,20,13 2d_line 16,14,21,14 2d_line 17,15,21,15 2d_line 17,16,22,16 2d_line 18,17,23,17 2d_line 18,18,23,18 2d_line 19,19,24,19 2d_line 19,20,24,20 2d_line 20,21,24,21 cursor_point 5 hint 5,"Rendu visuel" ON_CLICK 5,renduVisuel end_sub
sub dessinerFondIcone() dim_local i%,r%,v%,b% for i% = 0 to 27 r%=255-(5*i%) v%=255-(5*i%) b%=255-(5*i%) 2d_pen_color r%,v%,b% 2d_line 0,i%,28,i% next i% end_sub
sub creerBarreEtat() ALPHA 30 FONT_SIZE 30,10 font_color 30,240,240,240 top 30,HEIGHT_CLIENT(0)-20 left 30,8 caption 30," Réalisé en langage Panoramic par Marc - https://panoramic.1fr1.net/" end_sub
sub creerFenetreRenduVisuel() form 20 width 20,width(20) - width_client(20) + 300 height 20,height(20) - height_client(20) + 300 caption 20,"PanoCrypt : Rendu visuel" command_target_is 20 picture 21 full_space 21 command_target_is 0 hide 20 end_sub
sub creerMenuPop() main_menu_pop 31 sub_menu 32 parent 32,31 caption 32,"Copier tout le texte dans le presse papier"+CHR$(9)+"Ctrl+ C" on_click 32,copier sub_menu 33 parent 33,31 caption 33,"Coller le contenu du presse-papier"+CHR$(9)+"Ctrl+ V" on_click 33,coller sub_menu 34 parent 34,31 caption 34,"-" sub_menu 35 parent 35,31 caption 35,"Effacer le contenu du presse-papier" on_click 35,viderPressePapier end_sub
sub creerZoneMotDePasse(x%,y%) alpha 11 top 11,y% + 7 left 11,x% font_color 11,255,255,255 font_size 11,10 caption 11,"Mot de Passe :" edit 12 width 12,121 height 12,21 font_size 12,10 top 12,y% + 2 left 12,x% + 90 picture 13 top 13,y% left 13,x% + 212 width 13,28 height 13,28 color 13,30,30,30 2d_target_is 13 2d_pen_color 255,255,255 2d_line 12,7,17,7 2d_line 10,8,13,8 2d_line 16,8,19,8 2d_line 8,9,11,9 2d_line 18,9,21,9 2d_line 7,10,9,10 2d_line 20,10,22,10 2d_line 6,11,8,11 2d_line 21,11,23,11 2d_line 5,12,7,12 2d_line 22,12,24,12 2d_line 4,13,6,13 2d_line 23,13,25,13 2d_line 5,14,7,14 2d_line 22,14,24,14 2d_line 6,15,8,15 2d_line 21,15,23,15 2d_line 7,16,9,16 2d_line 20,16,22,16 2d_line 8,17,11,17 2d_line 18,17,21,17 2d_line 10,18,13,18 2d_line 16,18,19,18 2d_line 12,19,17,19 ' centre de l'oeil 2d_line 13,10,16,10 2d_line 12,11,14,11 2d_line 15,11,17,11 2d_line 11,12,13,12 2d_line 16,12,18,12 2d_point 11,13 2d_point 17,13 2d_line 11,14,13,14 2d_line 16,14,18,14 2d_line 12,15,14,15 2d_line 15,15,17,15 2d_line 13,16,16,16 cursor_point 13 MotDePasseVisibleOuiNon() on_click 13,afficherMdP end_sub
SUB creerIconeCopier(x%,y%) DIM_LOCAL i% PICTURE 6 HEIGHT 6,28 WIDTH 6,28 TOP 6,y% LEFT 6,x% CURSOR_POINT 6 ON_CLICK 6,Copier 2D_TARGET_IS 6 dessinerFondIcone() 2D_PEN_COLOR 0,0,0 2D_LINE 4,5,13,5 2D_LINE 12,5,16,9 2D_LINE 16,9,21,9 2D_LINE 20,9,24,13 2D_LINE 23,12,23,24 2D_LINE 23,23,11,23 2D_LINE 12,23,12,19 2D_LINE 12,19,3,19 2D_LINE 4,19,4,4
FOR i% = 6 TO 18 2D_FLOOD 12,i%,255,255,255 NEXT i%
FOR i% = 19 TO 22 2D_FLOOD 13,i%,255,255,255 NEXT i%
2D_LINE 11,5,11,10 2D_LINE 12,9,12,24 2D_LINE 19,9,19,14 2D_LINE 6,9,10,9 2D_LINE 11,9,21,9 2D_LINE 6,11,13,11 2D_LINE 6,13,13,13 2D_LINE 14,13,18,13 2D_LINE 19,13,24,13 2D_LINE 6,15,13,15 2D_LINE 14,15,22,15 2D_LINE 6,17,13,17 2D_LINE 14,17,22,17 2D_LINE 14,19,22,19 2D_LINE 14,21,22,21 hint 6,"Copier le texte dans le presse-papier" END_SUB
SUB creerIconeColler(x%,y%) DIM_LOCAL i% PICTURE 7 HEIGHT 7,28 WIDTH 7,28 TOP 7,y% LEFT 7,x% CURSOR_POINT 7 ON_CLICK 7,Coller 2D_TARGET_IS 7 dessinerFondIcone() 2D_PEN_COLOR 0,0,0 2D_LINE 11,3,15,3 2D_POINT 10,4 2D_POINT 15,4 2D_LINE 4,5,22,5 2D_POINT 8,6 2D_POINT 17,6 2D_LINE 8,7,18,7 2D_LINE 4,5,4,22 2D_LINE 4,21,13,21 2D_LINE 21,5,21,15 2D_LINE 20,13,24,17 2D_LINE 23,16,23,24 2D_LINE 23,23,11,23 2D_LINE 12,23,12,11 2D_LINE 12,12,20,12 2D_LINE 19,12,19,18 2D_LINE 19,17,24,17
FOR i% = 13 TO 22 2D_FLOOD 13,i%,255,255,255 NEXT i%
FOR i% = 14 TO 16 2D_FLOOD 20,i%,255,255,255 NEXT i%
2D_LINE 14,15,18,15 2D_LINE 14,17,18,17 2D_LINE 14,19,22,19 2D_LINE 14,21,22,21
FOR i% = 6 TO 20 2D_FLOOD 5,i%,200,150,80 NEXT i%
FOR i% = 6 TO 7 2D_FLOOD 18,i%,200,150,80 NEXT i%
2D_FLOOD 20,12,200,150,80 2D_FLOOD 9,6,120,120,120 2D_FLOOD 11,4,120,120,120 hint 7,"Coller le contenu du presse-papier" END_SUB
sub creerIconeViderPressePapier(x%,y%) DIM_LOCAL i% PICTURE 8 HEIGHT 8,28 WIDTH 8,28 TOP 8,y% LEFT 8,x% CURSOR_POINT 8 ON_CLICK 8,ViderPressePapier 2D_TARGET_IS 8 dessinerFondIcone() 2D_PEN_COLOR 0,0,0 2d_fill_color 255,255,255 2d_rectangle 5,5,23,22 2d_rectangle 9,5,19,8 2d_point 11,4 2d_point 16,4 2d_line 12,3,16,3 2d_flood 12,4,127,127,127 2d_flood 10,6,127,127,127 2d_line 9,9,19,19 2d_line 10,9,19,18 2d_line 9,10,18,19 2d_line 17,9,8,18 2d_line 18,9,8,19 2d_line 18,10,9,19 hint 8,"Effacer le contenu du presse-papier" end_sub
renduVisuel: if show(20) = 0 show 20 if text$(12) = "" encryptage() else encryptage2() end_if else hide 20 end_if return
fermerRenduVisuel: hide 20 return
afficherMdP: MotDePasseVisibleOuiNon() return
sub MotDePasseVisibleOuiNon() 2d_target_is 13 if flagMdP% = 0 secret_on 12 caret_position 12,len(text$(12)) hint 13,"Afficher le mot de passe" flagMdP% = 1 2d_pen_color 255,0,0 2d_line 6,5,23,22 2d_line 7,5,23,21 2d_line 6,6,22,22 else secret_off 12 caret_position 12,len(text$(12)) flagMdP% = 0 hint 13,"Cacher le mot de passe" 2d_pen_color 30,30,30 2d_line 6,5,23,22 2d_line 7,5,23,21 2d_line 6,6,22,22 2d_pen_color 255,255,255 2d_line 9,9,11,9 2d_point 10,8 2d_line 12,11,14,11 2d_line 15,15,17,15 2d_line 18,17,20,17 2d_point 18,18 end_if end_sub
copier: clipboard_string_copy text$(10) return
coller: text 10,clipboard_string_paste$ return
viderPressePapier: clipboard_string_copy "" return
sub VerificationPressePapier() dim_local a$, tx$ a$ = clipboard_string_paste$ if a$ <> "" tx$ = "Le presse-papier contient des données !" + chr$(13) + chr$(13) tx$ = tx$ + "Voulez-vous effacer le contenu du presse-papier ?" reponseUtilisateur% = message_warning_yes_no(tx$) if reponseUtilisateur% = 1 clipboard_string_copy "" message "Presse-papier vidé !" end_if end_if end_sub
redim: off_resize 0 width 0,width(0)-width_client(0) + 900 height 0,height(0)-height_client(0) + 665 on_resize 0,redim return
quitter: close_inactive if modif$ = "*" and text$(10) <> "" reponseUtilisateur% = message_warning_yes_no("Voulez-vous enregistrer le travail en cours ?") if reponseUtilisateur% = 0 return else if reponseUtilisateur% = 1 subEnregistrer() end_if end_if end_if VerificationPressePapier() close_active return Et pour finir, je rappelle que PanoCrypt est un logiciel expérimental et gratuit. Personne ne serait être tenu responsable des dommages ou des pertes de données résultant de son utilisation. Merci aux testeurs de m'indiquer tout dysfonctionnement. A bientôt ! EDIT du 12/10/2021 23h36 : rectification d'un bug : mise à jour du code-source.EDIT du 14/10/2021 19h58 : mise à jour du code suivant les recommandations de Klaus + remplacement de l'objet MEMO_RICH par un MEMO.
Dernière édition par Marc le Lun 18 Oct 2021 - 16:10, édité 8 fois | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: PanoCrypt Mar 12 Oct 2021 - 7:02 | |
| Bonjour Marc, Bravo pour cette réalisation originale qui sort vraiment de l'ordinaire ! Pas encore testé mais ça ne va pas tarder... | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: PanoCrypt Mar 12 Oct 2021 - 14:49 | |
| Là, ça marche super bien. Chouette petit système de codage original ! Pas si « farfelu » que ça et à conserver car ça peut-être utile à l'occasion... | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: PanoCrypt Mar 12 Oct 2021 - 23:54 | |
| Merci JJN4 de ton retour d'expérience.
@ tous :
Je viens de mettre le code-source à jour suite à la découverte d'un bug lors de la relecture du code.
| |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: PanoCrypt Mer 13 Oct 2021 - 15:52 | |
| Je ne sais pas si le bug que tu signales est le même que le problème que j'ai trouvé, mais j'ai essayé de crypter des textes (et non des listings) et j'ai découvert un problème de codage sur lequel j'étais déjà tombé il y a quelques années quand je codais avec bin_xor. je crois me rappeler que c'est quand le code ASCII détecté transformé par bin_xor donne chr$(10) ou chr$(13) (et je crois aussi chr$(0)). C'est rare, mais ça mutile gravement le texte enregistré. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: PanoCrypt Mer 13 Oct 2021 - 17:25 | |
| Salut JJN 4 ! Merci pour tes essais. - JJN4 a écrit:
- j'ai découvert un problème
de codage sur lequel j'étais déjà tombé il y a quelques années quand je codais avec bin_xor. je crois me rappeler que c'est quand le code ASCII détecté transformé par bin_xor donne chr$(10) ou chr$(13) (et je crois aussi chr$(0)). Non, il n’y a pas de rapport avec le bug que j’ai trouvé. La fonction BIN_XOR de Panoramic fonctionne parfaitement bien. Lors de ma batterie de tests, je n’ai jamais rencontré de problème avec les caractères LF (Line Feed, chr$(10) ) et CR (Carriage Return, chr$(13) ). Ils sont correctement restitués après un BIN_XOR(). Je viens de refaire un test avec un fichier court. Dans l’image ci-dessous, dans la partie basse, tu as le dump du fichier test avant cryptage. J’ai surligné les différents LF et CR. Dans la fenêtre du haut, c’est le dump du même fichier après encodage avec un mot de passe puis décodage. On constate que les LF et CR n’ont pas été altérés. La seule différence entre ces deux dumps est l’ajout à la fin du fichier d’un certain nombre de caractères "Espace" (caractère 32 en décimal soit 20 en hexadécimal), pour que l’image générée par mon programme représente un carré parfait. Aurais-tu un petit bout d’un fichier texte (deux ou trois lignes) qui produirait l’anomalie ? | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: PanoCrypt Mer 13 Oct 2021 - 18:06 | |
| Quand j'avais eu des problèmes de cet ordre, ce n'est pas quand (après transforamtion par bin_xor) cela donne 0 ou 10 ou 13 isolément, c'est quand ces nombres se succèdent... Ce que je peux dire, c'est que sur un fichier très long, cela donne un résultat très court (quelques lignes) tronqué un peu partout par de simples morceaux de phrases du texte entier...
Dernière édition par jjn4 le Ven 15 Oct 2021 - 4:53, édité 1 fois | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: PanoCrypt Mer 13 Oct 2021 - 22:04 | |
| @JJN4 Je pense que tu dépasses les capacités techniques du MEMO_RICH. Dans ton copier-coller tu as probablement des chaînes de caractères de contrôle qui ne sont pas compatibles avec le MEMO_RICH. C’est ce que j’évoquais avec Froggy One dans un autre post. D’autre part, si tu souhaites travailler avec des textes très longs, il faut remplacer le MEMO_RICH par un MEMO. C’est la ligne 373 du programme. Il n’y a rien d’autre à modifier. Gros document = temps de codage et décodage déraisonnablement longs ! Voici quelques résultats de tests effectués avec un fichier texte brut de 63710 lignes. Le MEMO_RICH n'a supporté que 10734 lignes, et encore cette dernière n’est pas complète : - Spoiler:
La version avec un MEMO au lieu du MEMO_RICH supporte sans broncher les 63710 lignes : - Spoiler:
Toujours avec le MEMO, j’ai crypté ces 63710 lignes sans encombre avec un temps d’attente de près de 10 minutes. Voici l’image générée par le cryptage : - Spoiler:
Puis j’ai décrypté cette image en une quinzaine de minutes. Le texte était complet, jusqu’à la dernière ligne. Autre test : Bien que je sois certain que BIN_XOR n’est aucunement coupable, j’ai quand même fait un test avec un fichier comportant une série successive de dix LF et dix CR. Pas de problème : copier-coller, encodage avec mot de passe, décodage et de nouveau copier-coller pour récupérer le fichier pour effectuer un dump, tout c'est bien passé. Dans la capture d’écran ci-dessous, nous avons dans fenêtre du bas le fichier test avant traitement et dans la fenêtre du haut, le même fichier après un cryptage/décryptage. Les séries de dix LF et dix CR sont parfaitement restituées. - Spoiler:
En conclusion : - Pour les gros documents il faut remplacer le MEMO_RICH de la ligne 373 par un simple MEMO. - Copier-coller uniquement du texte brut. - BIN_XOR fonctionne très bien. Pour les documents comportant autre chose que du texte brut, je vais créer un nouvel utilitaire comme l’a décrit Klaus ici : https://panoramic.1fr1.net/t6672-panocrypt-lite#79933Bonne soirée à tous ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: PanoCrypt Jeu 14 Oct 2021 - 0:16 | |
| Ou alors, peut-être, courcircuiter complètement l'affichage dans un MEMO ou MEMO_RICH et lire directement le fichier, en binaire peut-être, et le transformer ainsi, sans passer par un affichage.
C'est peut-être plus frustrant pour les passionnés de l'affichage, mais cela permet de gérer des fichiers de tous types, de toute longueur etc. On peut afficher une barre de progression pendant l'opération pour garder un contrôle visuel... | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: PanoCrypt Jeu 14 Oct 2021 - 0:56 | |
| - Klaus a écrit:
- Ou alors, peut-être, courcircuiter complètement l'affichage dans un MEMO ou MEMO_RICH et lire directement le fichier, en binaire peut-être, et le transformer ainsi, sans passer par un affichage.
Oui, tout à fait Klaus. Ce nouvel utilitaire est en cours de développement… Plus question d’image, je génère un fichier binaire directement sur le disque dur. En avant-première, voici la maquette de l’interface utilisateur de la partie chiffrement. Le fichier crypté pourra avoir un nom différent de l’original et l’extension sera ".poc ". Le nom original du fichier avec son extension sera crypté et ajouté en entête au fichier .poc. Ceci permettra lors du déchiffrement de retrouver le nom réel du fichier avec son extension. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: PanoCrypt Jeu 14 Oct 2021 - 1:23 | |
| Parfait ! Prévois dans ton interface visuelle une barre de progression qui sera utile pour les grands fichiers... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: PanoCrypt Jeu 14 Oct 2021 - 8:25 | |
| Salut Marc, C'est dommage que tu abandonnes l'idée du fichier image, c'était la base de PanoCrypt ! Que tu retires le memo ok mais tu devrais garder le principe de sauvegarde en image. Sinon il existe plein de logiciels de cryptage ! Après c'est ton choix. Bon courage pour la suite et à bientôt... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: PanoCrypt Jeu 14 Oct 2021 - 12:14 | |
| J'ai regardé un peu le source de ton code. J'ai revu un peu le début de la SUB encryoptage(), comme suit: - Code:
-
sub encryptage() dim_local texte$, longueurTexte%, carre%, complement%, x%,y%, r%,v%,b%,n%, caractere$ inactive 0 texte$ = text$(10) ' longueur du texte à chiffrer longueurTexte% = len(texte$) ' *** Klaus carre% = int(sqr(longueurTexte%/3)) carre% = int(sqr((longueurTexte%+2)/3)) : ' *** Klaus ' *** Klaus if (carre%*carre%) <> longueurTexte%/3 if (carre%*carre%) < longueurTexte%/3 : ' *** KLaus carre% = carre% + 1 end_if : ' *** Klaus complement% = (carre%*carre%*3)-longueurTexte% ' *** Klaus texte$ = texte$ + string$(complement%,chr$(32)) if complement%>0 then texte$ = texte$ + string$(complement%,chr$(32)) : ' *** Klaus ' *** Klaus end_if height 21,carre% width 21,carre% Cela joue peut-être à la marge, mais c'est pour le principe... Ainsi, selon moi, cette partie devient: - Code:
-
sub encryptage() dim_local texte$, longueurTexte%, carre%, complement%, x%,y%, r%,v%,b%,n%, caractere$ inactive 0 texte$ = text$(10) ' longueur du texte à chiffrer longueurTexte% = len(texte$) carre% = int(sqr((longueurTexte%+2)/3)) : ' *** Klaus if (carre%*carre%) < longueurTexte%/3 : ' *** KLaus carre% = carre% + 1 end_if : ' *** Klaus complement% = (carre%*carre%*3)-longueurTexte% if complement%>0 then texte$ = texte$ + string$(complement%,chr$(32)) : ' *** Klaus height 21,carre% width 21,carre% | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: PanoCrypt Jeu 14 Oct 2021 - 14:25 | |
| Conclusion des essais : - Les fichiers utilisés sont des textes Word copiés puis collés dans PanoCrypt. - Les fichiers qui plantent sont tous de longs fichiers. - Aucun fichier court n'a planté. - Des fichiers encore bien plus longs que ceux qui ont planté, n'ont pas planté. - En coupant en deux les fichiers qui ont planté, les deux moitiés ne plantent pas. Conclusion : × La longueur des fichiers joue un rôle. × Mais pas seulement, il y a aussi autre chose...? × Cela donne quand même un petit côté instable. × C'est vrai qu'on pourrait mettre un memo à la place du memo_rich, mais ce serait moins joli... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: PanoCrypt Jeu 14 Oct 2021 - 14:56 | |
| @jjn4: as-tu essayé la modification que j'ai postée ci-dessus ? Elle joue justement sur la taille du fichier... | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: PanoCrypt Jeu 14 Oct 2021 - 18:11 | |
| Désolé, je n'avais pas vu. Mais je ne comprend pas............ tu proposes deux formules différentes à essayer, c'est cela ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: PanoCrypt Jeu 14 Oct 2021 - 18:19 | |
| Non, ce n'est pas ça. J'ai posté 2 fragments de code. Le premier fragment montre le début de la SUB encryptage(), où j'ai mis en commentaire les lignes que je souhaite modifier et je les fais suivre d'une ligne montrant la version corrigée selon mon idée. Le second fragment montre la même séquence, mais expurgée du code désactivé pour une meilleure lisibilité. Le sens de cette modification est un calcul plus "correct" de la taille du carré nécessaire pour encrypter le texte. Dans certains cas, il pouvait y avoir des anomalies. C'est pourquoi je te suggérais d'essayer cette version pour le problème que tu constates. Voici cette SUB au complet: - Code:
-
sub encryptage() dim_local texte$, longueurTexte%, carre%, complement%, x%,y%, r%,v%,b%,n%, caractere$ inactive 0 texte$ = text$(10) ' longueur du texte à chiffrer longueurTexte% = len(texte$) carre% = int(sqr((longueurTexte%+2)/3)) : ' Klaus if (carre%*carre%) < longueurTexte%/3 : ' *** KLaus carre% = carre% + 1 end_if : ' *** Klaus complement% = (carre%*carre%*3)-longueurTexte% if complement%>0 then texte$ = texte$ + string$(complement%,chr$(32)) : ' *** Klaus height 21,carre% width 21,carre%
if carre% < width_client(20) top 21,(height_client(20) - carre%) / 2 left 21,(width_client(20) - carre%) / 2 end_if
2d_target_is 21 n% = 1 for y% = 0 to carre% - 1 for x% = 0 to carre% - 1 caractere$ = mid$(texte$,n%,1) r% = asc(caractere$) n% = n% + 1 caractere$ = mid$(texte$,n%,1) v% = asc(caractere$) n% = n% + 1 caractere$ = mid$(texte$,n%,1) b% = asc(caractere$) n% = n% + 1 2d_pen_color r%,v%,b% 2d_point x%,y% next x% next y% active 0 end_sub | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: PanoCrypt Jeu 14 Oct 2021 - 20:03 | |
| Bonsoir à tous !
Suivant les conseils de Klaus, j'ai mis à jour le code-source de PanoCrypt du premier post. Merci Klaus !
Les deux sub encrypte() et encrypte2() sont modifiées.
Le MEMO_RICH est abandonné au profit d’un MEMO. | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: PanoCrypt Ven 15 Oct 2021 - 5:17 | |
| Oui, super ! Je l'essaie dès demain... enfin aujourd'hui... | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: PanoCrypt Ven 15 Oct 2021 - 16:38 | |
| Bilan des essais : ça ne change rien avec cette dernière formule, le problème est toujours le même. J'ai (tenté + ou -, car c'est fou comme ce n'est pas facile quand c'est un programme qu'on n'a pas fait soi-même) rajouté un compteur de lignes et j'ai pu établir que : - le fichier le plus grand avec lequel ça a bien marché, fait quasiment 2500 lignes. - le fichier le moins grand avec lequel ça n'a pas marché doit faire un peu plus de 1800 lignes. - En se donnant un maximum de 1500 lignes, ça marche sans poser de problème. Bon, c'est une méthode comme une autre. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: PanoCrypt Sam 16 Oct 2021 - 10:49 | |
| Bonjour à tous !
Merci pour tes essais, JJN4.
De mon côté, j’ai effectué de nouveaux tests avec toutes sortes de longueurs de fichiers en texte brut. Pas de problème.
En conclusion, afin de ne pas dépasser les possibilités techniques de l’objet MEMO, je pense qu’il ne faut pas copier-coller autre chose que du texte brut.
Sur mon premier post, j'ai ajouté ceci :
AVERTISSEMENT : PanoCrypt fonctionne avec l’objet MEMO et ne peut traiter que du texte brut.
Ne coller pas de texte provenant d’un traitement de texte (Word, Writer, WordPad…). Lors de la copie, le presse-papier embarque avec lui une foule de séquences de contrôle non visibles (taille et police de caractère, saut de page, saut de colonne…), qui peuvent provoquer le dysfonctionnement du programme.
| |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: PanoCrypt Sam 16 Oct 2021 - 17:48 | |
| J'ai encore fait des essais et j'ai découvert un bug grave. C'est que, quand on enregistre en bmp avec mot de passe un fichier qui existait déjà, il demande si on veut l'écraser, on répond oui, et malgré cela, alors qu'il semble prendre le temps d'enregistrer normalement le nouveau fichier, le résultat est que l'enregistrement final reste celui de l'ancien fichier. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: PanoCrypt Dim 17 Oct 2021 - 1:55 | |
| Salut JJN4 ! Merci d'avoir effectué encore des tests. - Citation :
- ...le résultat est que l'enregistrement final reste celui
de l'ancien fichier. J'ai essayé à plusieurs reprises, l'ancien fichier est bien écrasé au profit du nouveau. Je n'arrive pas à reproduire l'anomalie. Voici en image le déroulement du dernier test que j'ai effectué : 1) je crée un fichier avec un mot de passe. - Spoiler:
2) Pour l'enregistrement, je vais sélectionner le fichier 3.bmp qui est visible dans la copie d'écran ci-après. - Spoiler:
3) Le programme me répond "Le fichier existe. Le remplacer ?" - Spoiler:
4) je clique sur "Oui". Le fichier est écrasé par le nouveau. Si je demande à charger le fichier 3.bmp, je vois que la miniature du fichier 3.bmp a totalement changé par rapport à ma deuxième copie d'écran ce qui prouve bien que l'ancien fichier a bien été écrasé : - Spoiler:
5) le texte décodé du fichier 3.bmp est bien mon texte que j'ai tapé et encodé en dernier : - Spoiler:
Ai-je bien fait comme toi ? Si oui, je ne vois pas de bug. | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: PanoCrypt Dim 17 Oct 2021 - 18:16 | |
| Bon, eh bien je ne comprends plus. Hier, j'avais fait 2 essais qui avaient montré l'erreur que j'ai précisée. Et j'ai dû effacer l'ancien fichier pour que le programme le reconnaisse comme nouveau et l'enregistre en bonne et due forme. Et aujourd'hui, j'ai essayé deux fois et ça n'a plus fait l'erreur ??? Je ne comprends pas... Désolé si je me suis trompé et t'ai fait des frayeurs inutiles... Je revérifierai d'autres fois pour voir si ça le refait... (c'est souvent dans l'utilisation intempestive que les erreurs apparaissent, alors qu'elles ont une fâcheuse tendance à se cacher quand on les cherche... ) | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: PanoCrypt Sam 30 Oct 2021 - 16:21 | |
| Entre temps, j'ai pu faire d'autres essais avec panoCrypt. Pas de problème, ça marche bien, l'erreur que j'avais cru trouver n'apparaît pas. Autant pour moi ! | |
| | | Contenu sponsorisé
| Sujet: Re: PanoCrypt | |
| |
| | | | PanoCrypt | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |