AESDecoder ne me donne pas les bonnes réponses.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

AESDecoder ne me donne pas les bonnes réponses.

Message par YvesRossignol »

Bonjour, j'ai encodé avec une routine tiré de la documentation de purebasic des fichiers.... j'essai maintenant de lire ces fichiers encodés sauf la première ligne mais je ne parviens pas à avoir le texte original...

merci de votre aide... je pense que je suis un peu beaucoup énormément perdu.

Yves

Code : Tout sélectionner

; DéCrypter une chaîne de caractères
;
Global Dim lect$(5)

Procedure crypt()    
    
    
    String$ = lect$(1)
    
    ; Crypter une chaîne de caractères
  
  StringMemorySize = StringByteLength(String$) + SizeOf(Character) ; Espace pour la chaîne et son caractère 'nul' de terminaison de chaîne
  *CipheredString = AllocateMemory(StringMemorySize)   
  *DecipheredString = AllocateMemory(StringMemorySize) 
  
  If AESEncoder(@String$, *CipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
    Debug "Codé : "+PeekS(*CipheredString) ; Attention, ça s'arrêtera sur le premier octet nul, uniquement à des fins de démonstration
    
    AESDecoder(*CipheredString, *DecipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
    Debug "Décodé : "+PeekS(*DecipheredString)
  EndIf

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
EndProcedure

def$ = GetCurrentDirectory()
  FichierParDefaut$ = def$  ; Répertoire et fichier par défaut qui seront affichés
  ;  Avec la chaîne suivante nous allons définir les filtres ("|" comme séparateur) pour l'affichage de fichier :
  ;  1er  : "Texte (*.txt)" comme nom, ".txt" et ".bat" comme extension autorisée
  ;  2ème : "PureBasic (*.pb)" comme nom, ".pb" comme extension autorisée
  ;  3ème : "Tous les fichiers (*.*)" comme nom, "*.*" comme extension autorisée, valide pour tous les fichiers
  Filtre$ = "Texte (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
  Filtre  = 0    ; utiliser  par défaut le premier des trois filtres possibles
  Fichier$ = OpenFileRequester("Choisissez un fichier à charger", FichierParDefaut$, Filtre$, Filtre)
  If Fichier$
    MessageRequester("Information", "Vous avez choisi le fichier suivant :"+Chr(10)+Fichier$, 0)
  Else
    MessageRequester("Information", "La sélection a été annulée.", 0)
  EndIf
  
  nombreligne.i = 0
  If ReadFile(0, Fichier$,#PB_Ascii)       ; Si le fichier peut être lu , on continue...
    
    While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
       lect$(nombreligne) = ReadString(0)  
      nombreligne = nombreligne + 1
    Wend
    CloseFile(0)               ; Ferme le fichier précédemment ouvert
  Else
    MessageRequester("Information","Impossible d'ouvrir le fichier!")
  EndIf
     For i = 0 To 3
      MessageRequester("essai",lect$(i))        
    Next i
    crypt()
    End 
exemple 1 (à mettre dans un fichier *.txt)
Weld Design
¡¬ØaA8>µ”i^8gú_ %í&
Û•>¾Ô79Û…§<ïFuB`0f,ú‹ Ïåüö<iJC­
™¤g¼žS‰JUh~9ò"™‘ìl
exemple2 (à mettre dans un fichier *.txt)
WeldDesign
qÎlÛx,ÍŸ÷ÅÒýV‹µPý,bÁcöÁ»7ÌÊGÁ*­gԲߡ3cúíúX?ûâÜO©ˆj‡Å¢Sß¾x· 7ÙŠz”ȓ֔üew6þÅΝc
ÔÒjVËñIÆÏ¾†nÚyÛÆ¦×
Yves Rossignol
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: AESDecoder ne me donne pas les bonnes réponses.

Message par Zorro »

voici un encodeur/decodeur AES complet, de NetMaestro (forum anglais )
et qui marche

etudie le ou sert t'en :)

Code : Tout sélectionner

; Demo: Streaming AES file encode/decode
; netmaestro August 2010
; Purebasic 4.51

Declare Encode(void)
Declare Decode(void)

OpenWindow(0,0,0,200,120,"Cryptor!",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ButtonGadget(0, 50,20,100,20,"Encrypt a file")
ButtonGadget(1, 50,50,100,20,"Decrypt a file")
CreateStatusBar(0, WindowID(0))
AddStatusBarField(200)
StatusBarProgress(0,0,0,#PB_ProgressBar_Smooth,0,100)

Repeat
		EventID = WaitWindowEvent()
		Select EventID
		Case #PB_Event_Gadget
				Select EventGadget()
				Case 0
						CreateThread(@Encode(), 0)
						
				Case 1
						CreateThread(@Decode(), 0)
				EndSelect
		EndSelect
Until EventID = #PB_Event_CloseWindow

End


Procedure Encode(void)
		
		chunksize = 4096
		rawfilename$ = OpenFileRequester("Please choose a file to encrypt:","","",0)
		encfilename$ = rawfilename$+".enc"
		
		If OpenFile(0, rawfilename$)
						If CreateFile(1, encfilename$)
										DisableGadget(0,1)
										DisableGadget(1,1)
										
										length.q = Lof(0)
										numparts = length/chunksize
										lastchunksize = length%chunksize
										If lastchunksize
												numparts+1
												lastchunk = numparts
										Else
												lastchunk = 0
										EndIf
										
										*raw     = AllocateMemory(chunksize)
										*secure  = AllocateMemory(chunksize)
										
										StartAESCipher(0, ?key, 256, ?iVector, #PB_Cipher_CBC|#PB_Cipher_Encode)
										
										For i=1 To numparts
												If i=lastchunk
														FillMemory(*raw, chunksize, 0, #PB_Byte)
														ReadData(0, *raw, lastchunksize)
												Else
														ReadData(0, *raw, chunksize)
												EndIf
												AddCipherBuffer(0, *raw, *secure, chunksize)
												WriteData(1, *secure, chunksize)
												prog.d = i/numparts*100
												StatusBarProgress(0,0, Int(prog))
												Delay(1)
										Next
										If lastchunksize
												WriteLong(1, lastchunksize)
										Else
												WriteLong(1, chunksize)
										EndIf
										
										FinishCipher(0)
								CloseFile(0)
						CloseFile(1)
						
						FreeMemory(*raw)
						FreeMemory(*secure)
						
						MessageRequester("Finished", "Encrypted file "+encfilename$+" saved",#MB_ICONINFORMATION)
						StatusBarProgress(0,0,0)
						
						DisableGadget(0,0)
						DisableGadget(1,0)
						
				EndIf
		EndIf
EndProcedure

Procedure Decode(void)
		
		chunksize = 4096
		
		encfilename$ = OpenFileRequester("Please choose a file to decrypt:","","",0)
		rawfilename$ = SaveFileRequester("Please choose a new name for the decrypted file","","",0)
		
		If OpenFile(0, encfilename$)
						FileSeek(0, Lof(0)-4)
						lastchunksize = ReadLong(0)
						FileSeek(0, 0)
						If CreateFile(1, rawfilename$)
										DisableGadget(0,1)
										DisableGadget(1,1)
										
										length.q = Lof(0)
										numparts = length/chunksize
										
										*raw     = AllocateMemory(chunksize)
										*secure  = AllocateMemory(chunksize)
										
										StartAESCipher(0, ?key, 256, ?iVector, #PB_Cipher_CBC|#PB_Cipher_Decode)
										
										For i=1 To numparts
												ReadData(0, *secure, chunksize)
												AddCipherBuffer(0, *secure, *raw, chunksize)
												If i=numparts
														WriteData(1, *raw, lastchunksize)
												Else
														WriteData(1, *raw, chunksize)
												EndIf
												prog.d = i/numparts*100
												StatusBarProgress(0,0, Int(prog))
												Delay(1)
										Next
										
										FinishCipher(0)
								CloseFile(0)
						CloseFile(1)
						
						FreeMemory(*raw)
						FreeMemory(*secure)
						
						MessageRequester("Finished", "Decrypted file "+rawfilename$+" saved",#MB_ICONINFORMATION)
						StatusBarProgress(0,0,0)
						
						DisableGadget(0,0)
						DisableGadget(1,0)
				EndIf
		EndIf
EndProcedure


DataSection
		key:
		Data.b $8C,$15,$51,$2C,$0C,$8A,$0A,$D8,$07,$E4,$21,$A2,$8E,$83,$A3,$88,$8A,$CA,$FB,$E1
		Data.b $7B,$A3,$6B,$D6,$BC,$F7,$E6,$CD,$FE,$B5,$D7,$B3
		iVector:
		Data.b $08,$0C,$96,$48,$33,$51,$35,$80,$0C,$A9,$42,$1E,$11,$E0,$83,$C7,$C4,$C6,$E1,$E4
		Data.b $2E,$40,$81,$0A,$24,$70,$00,$10,$08,$B3,$64,$21
EndDataSection

; 
; Epb 
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: AESDecoder ne me donne pas les bonnes réponses.

Message par YvesRossignol »

Merci infiniment Zorro, je regarde cela intensément.

yves
Yves Rossignol
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: AESDecoder ne me donne pas les bonnes réponses.

Message par nico »

@YvesRossignol
J'ai testé ton code, il semble bien fonctionné en ascii et unicode.

Es tu sûr que ton fichier texte est enregistré au format ansi et qu'il ne contient pas de BOM?, vérifié avec Notepad.
YvesRossignol
Messages : 133
Inscription : lun. 28/mars/2016 19:09

Re: AESDecoder ne me donne pas les bonnes réponses.

Message par YvesRossignol »

je vérifie cela.

Yves
Yves Rossignol
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: AESDecoder ne me donne pas les bonnes réponses.

Message par Marc56 »

Ouvres ton fichier texte avec un éditeur tel que NotePad++, EdipadPro etc et tu verras dans la barre d'état le format initial du fichier.

J'utilise ces deux là depuis des années car ils permettent toutes les transformations de type d'encodages possibles, le deuxième (EdipadPro) étant plus compliqué, mais particulièrement bon pour les expressions régulières.

:wink:
Répondre