Page 1 sur 1

FileFingerprint avec grain de sel

Publié : mar. 21/mars/2017 21:31
par ChaudEf
Bonsoir
Quand on hash une string en md5, on rajoute un grain de sel pour difficiliser le decryptage, est-il possible de faire cela aussi avec FileFingerprint ?

Merci

Re: FileFingerprint avec grain de sel

Publié : mar. 21/mars/2017 23:41
par Ollivier
Si tu peux le faire avec FingerPrint, c'est que tu peux le faire avec FileFingerPrint.

Re: FileFingerprint avec grain de sel

Publié : mer. 22/mars/2017 7:57
par Fred
Il n'y a pas de 'grain de sel' pour le md5

Re: FileFingerprint avec grain de sel

Publié : mer. 22/mars/2017 8:16
par ChaudEf
Il y a une autre solution ?

Re: FileFingerprint avec grain de sel

Publié : mer. 22/mars/2017 9:47
par Ar-S
Fred a écrit :Il n'y a pas de 'grain de sel' pour le md5
Je pense qu'il entend par là remplacer un des caractères ou ajouter un caractère à la fin ou au debut du hash, voir "reverser" le hash etc...

Re: FileFingerprint avec grain de sel

Publié : mer. 22/mars/2017 11:59
par ChaudEf
Enfait mon programme écrit des infos dans un fichier et je crains que quelqu'un le modifie manuellement.
Donc je prends un fingerprint du fichier que je stocke dans le registre, et quand je veux lire le fichier je compare d'abord sa signature avec celle qui est inscrite dans le registre.

Mais quelqu'un peut toujours changer le fichier, puis prendre un fiingerprint et l'écrire dans le registre et je n'y verrai que du feu

Re: FileFingerprint avec grain de sel

Publié : mer. 22/mars/2017 12:42
par Ar-S
Si tu as la parano de la modification, autant inscrire toutes tes infos dans le registre.
Tu as aussi la possibilité de faire un fichier complètement illisible... Une image !
En utilisant la steganographie tu es tranquille et tu n'as rien besoin d’écrire dans le registre.
J'ai créé Ascii2Pixel utilisant cette méthode.
- Tu crées une image vierge
- Tu crées un tableau 2 dimensions (x et y)
- Tu enregistres 4 caractères par pixel. R=asc(car1) G=asc(car2) B=asc(car3) A=asc(car4)
- Tu dessines ton pixel en x et y via Plot(X, Y , RGBA(R,G,B,A))
- Tu passes au pixel suivant.

Soit tu le fais tout les 3 caractères en RGB soit tous les 4 car en RGBA. Dans les 2 cas il faut utiliser le PNG.
Evidement tu sauves ton image en fichier renommé genre pref.dll

Franchement avec ça tu as un fichier pref sûr et de petite taille. Sachant qu'une image RGBA de 50x50 permet de stocker 10000 caractères, je te laisse entrevoir les possibilités.

Pour décoder tu faits l'inverse. Tu lis pixel par pixel et tu décomposes chaque pixel via Chr(R),Chr(G),Chr(B),Chr(A).
Et si tu es vicelard tu peux aussi mettre un grain de sel dans ton encodage/decodage.

Re: FileFingerprint avec grain de sel

Publié : mer. 22/mars/2017 13:05
par ChaudEf
Effectivement c'est une bien meilleur idée que ce que je fais, mais je suis malheureusement pas au niveau pour faire une prouesse pareille.

Re: FileFingerprint avec grain de sel

Publié : mer. 22/mars/2017 14:13
par Ar-S
Merci d'afficher les greetings si tu t'en sert.

Depuis je ne fais plus comme ça et suis passé à du tableau plutôt que de la liste mais il fonctionne même si le code est bordeleux.
ça te donnera la méthode de fonctionnement.

Essaye avec un petit ficher txt pour commencer.

Code : Tout sélectionner

; Ar-S ASCII 2 PIXEL
; code de 2008 fonctionne V PB 5.60 x64 OK
; Routines de conversion réalisées avec l'aide de Dobro & LNA


UsePNGImageDecoder()
UsePNGImageEncoder()

Declare.i car_pixel(car1,car2,car3,car4)
Declare.s pixel_4car(pixel)

Enumeration
  #WIN
  #BT_T2I
  #BT_I2T
  #Fichier
  #Image
  #BT_X
EndEnumeration


Global NewList Liste()



Procedure.i car_pixel(car1,car2,car3,car4)
  pixel=RGBA(car1,car2,car3,car4)
  ProcedureReturn pixel   
EndProcedure

Procedure.s pixel_4car(pixel)
  R=Red(pixel)
  g=Green(pixel)
  b=Blue(pixel)
  a=Alpha(pixel)
  car$=Chr(R)+Chr(g)+Chr(b)+Chr(a)
  ProcedureReturn car$
EndProcedure


Procedure OpenWindow_WIN()
  If OpenWindow(#WIN, 330, 155, 640, 150, "ASCII2PIXEL Lite", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    
    ButtonGadget(#BT_T2I, 20, 40, 300, 45, "TXT en IMAGE", #BS_FLAT)
    ButtonGadget(#BT_I2T, 325, 40, 300, 45, "IMAGE en TXT",#BS_FLAT)
    ButtonGadget(#BT_X, 20,90,600,45,"QUITTER",#BS_FLAT)
    
  EndIf
EndProcedure





OpenWindow_WIN()

;{- Event loop
Repeat

  Select WaitWindowEvent(10)
      
    Case #PB_Event_Gadget
      
      Select EventGadget()
          
        Case #BT_X  
          End
          
        Case #BT_T2I
          ; TXT 2 IMG
          
          NomFichier$ = OpenFileRequester("Fichier texte à encoder",GetCurrentDirectory(),"*.*",0)
          If NomFichier$
            OpenFile(#Fichier, NomFichier$) 
            nbc=0                      ;nbp=1
            ClearList(Liste())
            Position=0
            tf$=Str(Lof(#Fichier))          ; taille du fichier
            tf$=RSet(tf$,16,"0")            ; ajout de "0" à gauche  16 chiffre 
            AddElement(Liste())             ; formatage de la taille en pixel 2x4
            Liste()=car_pixel(Asc(Mid(tf$,1,1)),Asc(Mid(tf$,2,1)),Asc(Mid(tf$,3,1)),Asc(Mid(tf$,4,1)))
            AddElement(Liste())
            Liste()=car_pixel(Asc(Mid(tf$,5,1)),Asc(Mid(tf$,6,1)),Asc(Mid(tf$,7,1)),Asc(Mid(tf$,8,1)))
            AddElement(Liste())
            Liste()=car_pixel(Asc(Mid(tf$,9,1)),Asc(Mid(tf$,10,1)),Asc(Mid(tf$,11,1)),Asc(Mid(tf$,12,1)))
            AddElement(Liste())
            Liste()=car_pixel(Asc(Mid(tf$,13,1)),Asc(Mid(tf$,14,1)),Asc(Mid(tf$,15,1)),Asc(Mid(tf$,16,1)))
            AddElement(Liste())
            Liste()=car_pixel(91,60,35,93)  ; [<#]  balise
            nbc+20
            CloseFile(#Fichier)
            OpenFile(#Fichier, NomFichier$) 
            While Eof(#Fichier)=0 
              car1.c=0
              car2.c=0
              car3.c=0
              car4.c=0
              If ReadData(#Fichier,@car1,1)
                nbc+1
                If ReadData(#Fichier,@car2,1)
                  nbc+1
                  If ReadData(#Fichier,@car3,1)
                    nbc+1
                    If ReadData(#Fichier,@car4,1)
                      nbc+1
                    EndIf  
                  EndIf
                EndIf
              EndIf 
              nbp+1
              pixel= car_pixel(car1,car2,car3,car4)
              AddElement(Liste())
              Liste()=pixel

            Wend
            ;Debug "Il y a "+Str(nbc)+" caracteres"
            CloseFile(#Fichier)
            
            ;-{   1ere tentative de gestion de la taille des images.
            If nbc<32000
              Xpic=160 : Ypic = 50
            ElseIf nbc>31999 And nbc<64000
              Xpic=320 : Ypic=50
            ElseIf nbc>63999 And nbc<192000
              Xpic=320 : Ypic = 150
            ElseIf nbc=191999  And nbc<1024000
              Xpic=640 : Ypic = 400
            ElseIf nbc>1023999  And nbc<1920000
              Xpic=800 : Ypic = 600
            ElseIf nbc>1919999  And nbc<3145728
              Xpic=1024 : Ypic = 768
            ElseIf nbc=3145727  Or nbc<5242880
              Xpic=1280 : Ypic = 1024
            ElseIf nbc>5242880
              MessageRequester("Alert","TROP DE CARACTERES")
              Break
            EndIf
            
            ;creation de l'image 
            CreateImage(#Image,Xpic,Ypic,32)
            StartDrawing(ImageOutput(#Image))
            ResetList(Liste())
            For Y=1 To Ypic-1
              For x=1 To Xpic-1
                compteur=compteur+1
                NextElement(Liste())
                pixel=Liste()
                DrawingMode(#PB_2DDrawing_Default)
                Plot(x,Y,pixel)
                DrawingMode(#PB_2DDrawing_AlphaChannel)
                Plot(x,Y,pixel)                                                         
                If compteur=nbp+5   ; ajout 5 rangs au compteur pour taille et balise
                  compteur=0
                  Break 2
                EndIf                               
              Next x 
            Next Y   
            StopDrawing()
            
            ;- Sauvegarde
            Delay(500)


            NomFichier$ = SaveFileRequester("Enregistrer image", GetCurrentDirectory(), "*.png", 0)
            
            If NomFichier$
              ext$=LCase(GetExtensionPart(NomFichier$))
              If ext$<>"png" : NomFichier$=NomFichier$+".png"
              EndIf

              Resultat = SaveImage(#Image, NomFichier$ , #PB_ImagePlugin_PNG)
              
              MessageRequester("terminé","Terminé")
              
            Else
              ;SetGadgetText(#AFFICHE,Cancel$) ;-annul
              Debug "Annulé"
            EndIf
          Else
            ;SetGadgetText(#AFFICHE,Cancel$) ;-annul
            Debug "Annulé"
          EndIf
          
          
          
          ;- BT 2 - IMAGE en TXT -----------------------
        Case #BT_I2T
          filtre$=filtre2$
          filtre=0
          ;           GetPrefDir(pref$,#PNG)
          NomFichier$ = OpenFileRequester(Loadpng$, Defaut$, filtre$, 0)
          Texte$="":car_4$="":pixel=0:compteur=0
          Resultat = LoadImage(#Image, NomFichier$,32)
          If OpenFile(#Fichier, NomFichier$)
            
            nbff=1
            StartDrawing(ImageOutput(#Image))
            For Y=1 To ImageHeight(#Image)-1
              For x=1 To  ImageWidth(#Image)-1
                nbf=nbf+1
                pixel=Point(x,Y)
                If pixel>0
                  DrawingMode(#PB_2DDrawing_Default)
                  car_4$ = Chr(Red(pixel)) + Chr(Green(pixel)) + Chr(Blue(pixel))
                  ;Debug "sans Alpha : "+car_4$
                  DrawingMode(#PB_2DDrawing_AlphaChannel)
                  ;car_4$ + Chr(Alpha(pixel))
                  car_4$ + Chr(Alpha(Point(x,Y)))
                  ;Debug "avec Alpha : "+car_4$
                EndIf
                Texte$+car_4$
                If Left(car_4$,4)="[<#]"                     ;  recherche balise taille
                  debutf=Len(Texte$)                         ;  nb caracteres  (taille et la balise) en principe 15 (3x4) 16 avec le zero
                  tf=Val(Right(Texte$,16))+debutf+1          ;(+1=16)   ;  recupere la taille du fichier et ajoute de 3 rangs de 4 pour synchro compteur
                  Texte$=""                                  ;  enlève les infos taille du texte après lecture
                EndIf
                If nbf=(tf+1)/4:Break 2:EndIf              ;  tf+1 car la taille du fichier a le zero inclu
              Next x
            Next Y                                                                            
            StopDrawing()
            FreeImage(#Image)
            ;             SetLastDir(NomFichier$,#PNG)
            
            
            ;- AFFICHAGE
            Debug Texte$
            MessageRequester("terminé","Terminé")
            
          Else
            Debug "Annulé"
          EndIf
        
          
      EndSelect
  EndSelect
  
ForEver