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
Merci d'avance.