Problème avec AllocateMemory

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Problème avec AllocateMemory

Message par MysteryMann »

Bonjour tout le monde j'ai besoin d'un peu d'aide je coince encore avec la manipulation de la mémoire j'aimerais récupérer le contenu de *CipheredString sous une forme hexadécimale (string) dans une variable et je souhaite pouvoir faire le contraire par la même occasion :)

( le but c'est de retourner la valeur hexadécimale dans une procédure )

merci de vos réponses :?: :idea:

Code : Tout sélectionner

; Crypter une chaîne de caractères
  ;
  String$ = "Hello voici un test pour AES"
  
  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
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec AllocateMemory

Message par Zorro »

peut etre comme ça ?

Code : Tout sélectionner

; Crypter une chaîne de caractères
;
String$ = "Hello voici un test pour AES"

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
		
		; ***ajout Zorro *************
		code.s=PeekS(*CipheredString   )	
		For i=1 to len(code.s)
				ex=asc(mid(code.s,i,1))	
				hexa.s=hexa.s+hex(ex) ; ici le resultat en hexa
		Next i
		;******************
		debug "resultat en hexa de la chaine codée :"+hexa.s
		
		
		
		AESDecoder(*CipheredString, *DecipheredString, StringByteLength(String$), ?Key, 128, ?InitializationVector)
		Debug "Décodé : "+PeekS(*DecipheredString)
		
		
		; ***ajout Zorro *************
		decode.s=PeekS(*DecipheredString  )	
		For i=1 to len(decode.s)
				ex=asc(mid(decode.s,i,1))	
				hexadec.s=hexadec.s+hex(ex) ; ici le resultat en hexa
		Next i
		;******************
		debug "resultat en hexa de la chaine decodée :"+hexadec.s
		
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

Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Re: Problème avec AllocateMemory

Message par MysteryMann »

Zorro tu es vraiment très fort avec la manipulation de la mémoire merci a toi :D

je suppose impossible en 1 seul bloc ?
Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Re: Problème avec AllocateMemory

Message par MysteryMann »

c'est bizarre ce n'est pas le même hexa que dans le fichier crée dans mon code j'ai dû me tromper quelque part

j'obtiens vraiment 2 valeurs différentes 8O
Methode Zorro : 253A3303E96C0B34FD33A7151B1F0281FB5868FA72FD448D63BC0961211D1705447423A62ECC55EBB3AA4B50EDAC538C5D6B5B03E30819CB
Methode File : 3A253336CE9340B33FD15A71F1B810258FBFA68FD728D44BC6361091D215177444A623CC2EEB55AAB3504BACED8C536B5D35B8E3CB19

un sacré mélange :D

Code : Tout sélectionner

If CreateFile(0, "aes.dat")
WriteData(0,*CipheredString,StringByteLength(String$))
CloseFile(0)                  
EndIf
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Problème avec AllocateMemory

Message par Zorro »

j'ai fait le test , et ce qui se passe, je te l'ai deja expliqué ;)

j'ai donc ajouté ce morceau de code

Code : Tout sélectionner

		if FileSize("aes.dat")>-1
				DeleteFile("aes.dat")
		Endif
		If OpenFile(0, "aes.dat")
						WriteData(0,*CipheredString,StringByteLength(String$,#PB_UTF8   ))
				CloseFile(0)                 
		EndIf


voici une capture du resultat du prg , et de sa représentation en hexa
dans le fichier :

Image

tu remarques une chose :

l'hexa codé renvoie les premiers octets suivant :
91 56 B1 8E
le fichier lui renvoie ceci :
56 91 8E B1
tu ne remarque rien ??
le fichier envoie 56 91 alors qu'en ram c'est 91 56
puis le fichier renvoie B1 8E alors qu'en Ram c'est 8E B1 ... bref tout est inversé

voila, c'est ça le format little_indian

avec un Atari ST et son 68000 les valeurs auraient ete dans le bon sens !!
mais avec un PC , et les "pentium" c'est l'inverse , octets de poids fort, et faible ne sont pas ecrit dans le meme sens !!


voir ici : https://fr.wikipedia.org/wiki/Endianness

prends le temps de lire cette fois :)

ps:
MysteryMann a écrit :Zorro tu es vraiment très fort avec la manipulation de la mémoire
pas du tout ! c'est surement le domaine que je maitrise le moins !

mais par contre, le boulot sur les Strings, ça j'aime bien :)
Avatar de l’utilisateur
MysteryMann
Messages : 14
Inscription : mar. 04/oct./2016 9:44

Re: Problème avec AllocateMemory

Message par MysteryMann »

Oui c'est vrai c'est exact je m'en doute un peu qu'il y ait inversion mais j'ai préféré confirmation comment les remettre dans le bon sens ? y a vraiment besoin où les données sont toujours bonnes si je remets le tout en mémoire ? pourquoi avec writedata tout est dans l'ordre ?

Ça mélange vraiment la tête j'ai du mal avec ça

je vais faire quelque teste pour mieux comprendre
Répondre