Page 1 sur 1

[RESOLU] AES et label

Publié : sam. 23/avr./2011 16:15
par blendman
Salut

J'utilise les commandes AESDecoder(*Input, *Output, Size, *Key, Bits, *InitializationVector) et AESencoderr(*Input, *Output, Size, *Key, Bits, *InitializationVector)

En tant que *key et *InitializationVector, j'utilise comme l'exemple des datasection avec labels.

Code : Tout sélectionner

  String$ = "Hello this is a test for AES"
  *CipheredString   = AllocateMemory(Len(String$)+1) ; Space for the string and its
  *DecipheredString = AllocateMemory(Len(String$)+1) ; null terminating character (ASCII mode)
  
  If AESEncoder(@String$, *CipheredString, Len(String$), ?Key, 128, ?InitializationVector)
    Debug "Ciphered: "+PeekS(*CipheredString)
    
    AESDecoder(*CipheredString, *DecipheredString, Len(String$), ?Key, 128, ?InitializationVector)
    Debug "Deciphered: "+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
je voudrais faire ceci :

Code : Tout sélectionner

String$ = "Hello this is a test for AES"
  *CipheredString   = AllocateMemory(Len(String$)+1) ; Space for the string and its
  *DecipheredString = AllocateMemory(Len(String$)+1) ; null terminating character (ASCII mode)
  keynew = ?(Key+"_01")
vector = ?(InitializationVector+"_01")

  If AESEncoder(@String$, *CipheredString, Len(String$), keynew, 128,vector )
    Debug "Ciphered: "+PeekS(*CipheredString)
    
    AESDecoder(*CipheredString, *DecipheredString, Len(String$), ?Key, 128, ?InitializationVector)
    Debug "Deciphered: "+PeekS(*DecipheredString)
  EndIf

  DataSection
    Key_01:
      Data.b $06, $a9, $21, $40, $36, $b8, $a1, $5b, $51, $2e, $03, $d5, $34, $12, $00, $06
  
    InitializationVector_01:
      Data.b $3d, $af, $ba, $42, $9d, $9e, $b4, $30, $b4, $22, $da, $80, $2c, $9f, $ac, $41

Key_02:
      Data.b $06, $a9, $21, $40, $36, $b8,$d5, $34, $12, $00, $06
  
    InitializationVector_02:
      Data.b $3d, $af, $ba, $42, $9d, $9e, $da, $80, $2c, $9f, $ac, $41

  EndDataSection
mais bien sur ça ne marche pas.
savez -vous comment on peut "modifier" l'adresse du label dans la procedure aesdecoder() ou aesencoder() ?

Merci :).

Re: AES et label

Publié : sam. 23/avr./2011 16:54
par Chris
Tu tiens vraiment à te (nous) compliquer la vie, ou quoi? :mrgreen:
Avec deux zones de datas, il va falloir choisir entre l'une ou l'autre, ou alors il faudrait nous dire ce que tu veux obtenir exactement.
Parce que, par exemple, si tu cherches à coder avec une zone et décoder avec l'autre, il y a peu de chances que ça fonctionne (Bon... là, j'imagine que tu t'en doutes).

Re: AES et label

Publié : sam. 23/avr./2011 17:05
par blendman
Chris a écrit :Tu tiens vraiment à te (nous) compliquer la vie, ou quoi? :mrgreen:
Avec deux zones de datas, il va falloir choisir entre l'une ou l'autre, ou alors il faudrait nous dire ce que tu veux obtenir exactement.
Parce que, par exemple, si tu cherches à coder avec une zone et décoder avec l'autre, il y a peu de chances que ça fonctionne (Bon... là, j'imagine que tu t'en doutes).
non, en fait, j'ai crée une procédure, dans laquelle on mettra la "zone" data dans les paramètres de la procédure.

Par exemple (la procédure est incomplète, mais c'est pour illustrer le système avec ces paramètres de zone data):

Code : Tout sélectionner

procedure decode(file$,keynum)
labelkey = ?Key +"_"+keynum
labelvector = ?InitializationVector + "_" +keynum
AESEncoder(@String$, *CipheredString, Len(String$), labelkey, 128, labelvector)
endprocedure
Comme ça, je n'ai qu'une seule procédure pour plusieurs "key" et vector :).
c'est plus court niveau code en fait et plus facile pour moi.

Je fais un simple :

Code : Tout sélectionner

decode("texte.txt",02)
Et je sais que la zone data est la 02 pour texte.txt :)

Du coup, je peux coder/décoder avec plusieurs zone data si besoin
C'est aussi plus facile à encoder et à décoder du coup.

Je peux faire ce genre de chose ?

Re: AES et label

Publié : sam. 23/avr./2011 17:08
par djes
Un label n'est qu'une adresse mémoire, c'est à dire un nombre. Tu peux y ajouter ce que tu veux. Toto = ?DATAS + 16 ou Toto = ?DATA1 + (?DATA2 - ?DATA1) / 2. Par contre ce que tu fais ressemble plutôt à une macro, ce qui ne te servira à rien si tu veux changer une adresse mémoire de façon dynamique, à l'exécution (une macro ne sert qu'à la compilation).

Re: AES et label

Publié : sam. 23/avr./2011 17:12
par Chris
Les labels sont des adresses mémoire.
Donc, j'imagine qu'en faisant un truc du genre *KeyNew = ?Key_01, ça devrait fonctionner (Je dis ça, mais j'ai pas essayé. J'en ai aucune idée, en fait)

Sinon, qu'est-ce qui t'empêche de passer ton label en paramètres

Re: AES et label

Publié : sam. 23/avr./2011 17:23
par blendman
Chris a écrit :Sinon, qu'est-ce qui t'empêche de passer ton label en paramètres
ah oui, je n'y avais pas pensé tiens :D

bonne idée :D

Re: AES et label

Publié : sam. 23/avr./2011 17:47
par Chris
Tiens, voilà un truc qui marche.
Je sais pas si c'est très...académique... comme code, mais ça fonctionne.

Code : Tout sélectionner

Procedure.s Decode(*Texte, Length, *key, *Vector)
  *DecipheredString = AllocateMemory(Length) ; null terminating character (ASCII mode)
  
  If AESDecoder(*Texte, *DecipheredString, Length, *key, 128, *Vector)
    a$ = PeekS(*DecipheredString)
    ProcedureReturn a$
  EndIf
EndProcedure

Procedure.s Encode(Texte.s, *key, *Vector )
  *CipheredString   = AllocateMemory(Len(Texte)+1) ; Space for the string and its
  
  If AESEncoder(@Texte, *CipheredString, Len(Texte), *key, 128,*Vector )
    a$ = PeekS(*CipheredString)
    
    ProcedureReturn a$
  EndIf
  
EndProcedure


String$ = "Hello this is a test for AES"

; Encodage
Texte_Encode$ = Encode (String$, ?Key_01, ?InitializationVector_01)
Debug Texte_Encode$

; Décodage
*Buffer = AllocateMemory(Len(Texte_Encode$))
PokeS(*Buffer, Texte_Encode$)

Texte_Decode$ = Decode(*Buffer, Len(Texte_Encode$), ?Key_01, ?InitializationVector_01)
Debug Texte_Decode$


DataSection
  Key_01:
  Data.b $06, $A9, $21, $40, $36, $B8, $A1, $5B, $51, $2E, $03, $D5, $34, $12, $00, $06
  
  InitializationVector_01:
  Data.b $3D, $AF, $BA, $42, $9D, $9E, $B4, $30, $B4, $22, $DA, $80, $2C, $9F, $AC, $41
  
  Key_02:
  Data.b $06, $A9, $21, $40, $36, $B8,$D5, $34, $12, $00, $06 ; <---- Ca, il me semble que c'est trop court (16 bits, en principe)
  
  InitializationVector_02:
  Data.b $3D, $AF, $BA, $42, $9D, $9E, $DA, $80, $2C, $9F, $AC, $41
  
EndDataSection