Problème de cryptage sous linux.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
bloiiing
Messages : 53
Inscription : sam. 09/janv./2010 9:16

Problème de cryptage sous linux.

Message par bloiiing »

Bonjour, je poste ce message dans la catégorie débutants car ça ne doit pas être grand-chose mais je n'arrive pas à trouver.

J'ai un petit programme que j'ai trouvé ici même ou bien dans la doc, je ne me souviens plus. Ce programme me crypte un fichier unique et toujours le même. Or depuis que ce fichier à dépassé la taille de 128Ko le programme ne fonctionne plus sous linux, alors qu'il continue de fonctionner sous windows. L'erreur que j'ai: impossible d'allouer le bloc mémoire nécessaire au chiffrement.

Voici le code:

Code : Tout sélectionner

;--------------------------------------
;ENCODER UN FICHIER (TOUS TYPE)
;--------------------------------------
;128 bit par défaut
;Pour modifier le niveau de chiffrement, il suffit de l'indiquer lors de l'appel de la procédure
;Ainsi:
;AEScrypt(fichier$,192) pour encoder sur 192 bit
;AEScrypt(fichier$,256) pour encoder sur 256 bit
;Faire de même pour décoder.
;--------------------------------------

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

Procedure.s AEScrypt(fichier$,level.l=128)
 
  If ReadFile(0, fichier$)
    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
    EndIf
    CloseFile(0)
  EndIf
;On attaque le chiffrement des données placées en mémoire...
  *CipheredData = AllocateMemory(MemorySize(*MemoryID)+1) ; allocation d'un autre bloc mémoire de la taille du fichier original+1
  If AESEncoder(*MemoryID, *CipheredData, MemorySize(*MemoryID), ?Key, level, ?InitializationVector)
    FreeMemory(*MemoryID) ; libère la mémoire précédemment allouée dont on a plus besoin
    If *CipheredData > 0
      ; On crée le fichier en ajoutant simplement une nouvelle extension
      ; cela permet de savoir de quel type de fichier original il s'agit et de facilement le décoder plus tard
      CipheredFile = CreateFile(#PB_Any, GetCurrentDirectory() + "fichier_crypte.save");
      If CipheredFile
        WriteData(CipheredFile, *CipheredData, length)
        CloseFile(CipheredFile) 
      EndIf
      FreeMemory(*CipheredData) ; là aussi on libère la mémoire utilisée car plus nécessaire
      ErrorMessage$ = "Fichier chiffré!"
    Else
      ErrorMessage$ = "Allocate Memory Error! - Impossible d'allouer le bloc mémoire nécessaire au chiffrement."
    EndIf
  Else
    ErrorMessage$ = "AESEncoder() error! - Le processus d'encodage n'a pu aboutir."
  EndIf
  ProcedureReturn ErrorMessage$
EndProcedure

;Test encrypt/
file$ = GetCurrentDirectory() + "FichierACrypter.odt";
Debug file$
If file$
  confirm$ = AEScrypt(file$)
  If confirm$ <> "Fichier chiffré!"
    MessageRequester("Erreur!","Une erreur est survenue lors du chiffrement de "+GetFilePart(file$)+Chr(10)+"Message : "+confirm$);
  Else
    ;;suppression de l'original / à vous de voir /
    DeleteFile(file$)
  EndIf
EndIf
Si vous pouviez me dire pourquoi ça ne marche pas sous linux pour les fichiers de plus de 128Ko ce serait cool.

Merci d'avance.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème de cryptage sous linux.

Message par G-Rom »

Bonjour , ca marche bien sous linux ( x64 ) , vérifie que ton fichier existe bien dans le code.
Avatar de l’utilisateur
bloiiing
Messages : 53
Inscription : sam. 09/janv./2010 9:16

Re: Problème de cryptage sous linux.

Message par bloiiing »

Ça ne marche pas. En fait dès que le fichier fait plus de 128Ko les pointeurs *MemoryID et *CipheredData prennent des valeurs négatives alors que quand le fichier fait moins de 128Ko ils ont des valeurs > 0. Je ne comprend pas...

En tout cas merci d'avoir perdu un peu de temps à me répondre.

A+
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème de cryptage sous linux.

Message par G-Rom »

Qu'est ce que ca donne cette procedure? :

Code : Tout sélectionner

Procedure.s AEScrypt(fichier$,level.l=128)
  Protected length.i = #Null
  Protected *MemoryID.i = #Null
  If ReadFile(0, fichier$)
    length = Lof(0)                            ; Lit la taille en octets du fichier
    Debug "TAILLE DU FICHIER = "+Str(length)
    *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
    EndIf
    CloseFile(0)
  Else
    Debug "ERREUR DE LECTURE SUR LE FICHIER !"
    ProcedureReturn "Le fichier ne peut être ouvert !"
  EndIf
  
  Debug "TAILLE DE LA MEMOIRE ALLOUE : "+Str(MemorySize(length))
  
;On attaque le chiffrement des données placées en mémoire...
  *CipheredData = AllocateMemory(MemorySize(*MemoryID)+1) ; allocation d'un autre bloc mémoire de la taille du fichier original+1
  If AESEncoder(*MemoryID, *CipheredData, MemorySize(*MemoryID), ?Key, level, ?InitializationVector)
    FreeMemory(*MemoryID) ; libère la mémoire précédemment allouée dont on a plus besoin
    If *CipheredData > 0
      ; On crée le fichier en ajoutant simplement une nouvelle extension
      ; cela permet de savoir de quel type de fichier original il s'agit et de facilement le décoder plus tard
      CipheredFile = CreateFile(#PB_Any, GetCurrentDirectory() + "fichier_crypte.save");
      If CipheredFile
        WriteData(CipheredFile, *CipheredData, length)
        CloseFile(CipheredFile)
      EndIf
      FreeMemory(*CipheredData) ; là aussi on libère la mémoire utilisée car plus nécessaire
      ErrorMessage$ = "Fichier chiffré!"
    Else
      ErrorMessage$ = "Allocate Memory Error! - Impossible d'allouer le bloc mémoire nécessaire au chiffrement."
    EndIf
  Else
    ErrorMessage$ = "AESEncoder() error! - Le processus d'encodage n'a pu aboutir."
  EndIf
  ProcedureReturn ErrorMessage$
EndProcedure
Avatar de l’utilisateur
bloiiing
Messages : 53
Inscription : sam. 09/janv./2010 9:16

Re: Problème de cryptage sous linux.

Message par bloiiing »

Ça stoppe ici:

Code : Tout sélectionner

 Debug "TAILLE DE LA MEMOIRE ALLOUE : "+Str(MemorySize(length))
et ça me dit: invalid memory access

je pense que ça doit venir de la fonction MemorySize(val) pour des valeurs de val supérieures à 128Ko. Le problème c'est que je n'ai pas l'aide sous linux et je suis obligé de passer sous windows chaque fois que je veux la consulter. Ça n'est pas très pratique...

En tout cas, grâce à ton code je vois un peu plus précisément l'origine du problème, bien que je n'ai pas encore compris.

Merci de ton aide.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème de cryptage sous linux.

Message par G-Rom »

c'est *MemoryID qu'il faut en paramètre , je me suis trompé.
Avatar de l’utilisateur
bloiiing
Messages : 53
Inscription : sam. 09/janv./2010 9:16

Re: Problème de cryptage sous linux.

Message par bloiiing »

Ça donne:

Code : Tout sélectionner

Debug "TAILLE DE LA MEMOIRE ALLOUE : "+Str(*MemoryID)

/home/user/FichierACrypter.odt
TAILLE DU FICHIER = 131557
TAILLE DE LA MEMOIRE ALLOUE : -1269645300
C'est ce que je disais. *MemoryID prend une valeur négative pour des fichiers supérieur à 128Ko. C'est pareil pour *CipheredData qui normalement devrait être > 0 et qui présentement ne l'est pas.

A+
Avatar de l’utilisateur
bloiiing
Messages : 53
Inscription : sam. 09/janv./2010 9:16

Re: Problème de cryptage sous linux.

Message par bloiiing »

Pardon je crois que j'ai fait une erreur. Je rectifie:

Code : Tout sélectionner

Debug "TAILLE DE LA MEMOIRE ALLOUE : "+Str(MemorySize(*MemoryID))

/home/user/FichierACrypter.odt
TAILLE DU FICHIER = 131557
TAILLE DE LA MEMOIRE ALLOUE : 131557
C'est mieux mais j'ai toujours le même message d'erreur: Allocate Memory Error! - Impossible d'allouer le bloc mémoire nécessaire au chiffrement.

A+
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème de cryptage sous linux.

Message par G-Rom »

tes test de vérification d'allocation sont foireux :
*MEMORY = #Null
*MEMORY = AllocateMemory(128*128 )

; CORRECT
If *MEMORY <> #Null

EndIf


; INCORRECT
If *MEMORY > 0

EndIf
Essaye déjà cette correction. ;)
Avatar de l’utilisateur
bloiiing
Messages : 53
Inscription : sam. 09/janv./2010 9:16

Re: Problème de cryptage sous linux.

Message par bloiiing »

Ça venait bien de là. Merci pour ton aide car j'aurais pu chercher longtemps... En tous cas, maintenant ça marche!

Merci encore et a+
Répondre