Seite 1 von 2

AES Decodieren

Verfasst: 01.05.2010 19:45
von Kumpu
Ich bins mal wieder /:->
Ich habe ein Problem beim dekodieren mit AES. Wenn ich einen String kodiere, dann in einer Datei speichere, später nach erneutem Programmaufruf wieder lese und dekodiere erhalte ich jedes mal unterschiedliche Ergebnisse. Dekodiere ich den String dagegen ohne das Programm erneut aufzurufen, läuft alles richtig.
Den String dekodiere ich so:

Code: Alles auswählen

AESDecoder(@String$, *Buffer, Len(String$), @Passwort$, 128, ?Vector)
Ich vermute jetzt mal dass das @Passwort$ nicht so toll ist, aber ich weiß nicht wie das sonst geht... Könnt ihr mir helfen??

Re: AES Decodieren

Verfasst: 01.05.2010 19:52
von ts-soft
Es wird ein Speicher erwartet, in Byte und nicht in Zeichen. Len sollte man also
tunlichst nicht nutzen sondern StringByteLen + SizeOf(Character), weil das abschliessende
NullByte ist auch zu berücksichtigen.

Re: AES Decodieren

Verfasst: 01.05.2010 20:07
von Mok
ts-soft hat geschrieben:tunlichst nicht nutzen sondern StringByteLen + SizeOf(Character), weil das abschliessende
NullByte ist auch zu berücksichtigen.
rly?
Dann wird in der Hilfe aber Müll verzapft... http://purebasic.com/documentation/ciph ... coder.html

Re: AES Decodieren

Verfasst: 01.05.2010 20:14
von ts-soft
Mok hat geschrieben:rly?
Dann wird in der Hilfe aber Müll verzapft... http://purebasic.com/documentation/ciph ... coder.html
Es wurde ein sehr schlechtes Beispiel gewählt, welches nur im ASCII Modus funktioniert.
Vermutlich damit auch absolute PB-Daus es verstehen :mrgreen:
Ich halte so ein Beispiel für ungeeignet.

Re: AES Decodieren

Verfasst: 02.05.2010 00:30
von Kumpu
Das funktioniert bei mir auch nicht :(
Also eigentlich sollte das Beispiel in der Hilfe doch gehn, ich kompiliere doch in Ascii.... Oder?
Kann irgendjemand mal ein Beispiel posten wies richtig geht? Ich hab jetzt schon so ziemlich alles ausprobiert! Bin echt verzweifelt :|

Re: AES Decodieren

Verfasst: 02.05.2010 00:45
von ts-soft
Das Beispiel in der Hilfe sollte im ASCII-Modus funktionieren.
Hier mal eine überarbeitete Version für ASCII- und Unicode Modus:

Code: Alles auswählen

EnableExplicit

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

Define *CipheredString   = AllocateMemory(StringByteLength(String$) + SizeOf(Character)) ; Platz für den null-terminierten String
Define *DecipheredString = AllocateMemory(StringByteLength(String$) + SizeOf(Character))  ; mit seiner abschließenden Null

If AESEncoder(@String$, *CipheredString, MemorySize(*CipheredString), ?Key, 128, ?InitializationVector)
  Debug "Ciphered: " + PeekS(*CipheredString)
  
  AESDecoder(*CipheredString, *DecipheredString, MemorySize(*DecipheredString), ?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

Re: AES Decodieren

Verfasst: 02.05.2010 01:55
von Kumpu
Er braucht für SizeOf(Character) eine deklarierte Variable...
Ist das jetzt Chr(0) oder was? Oder wie? :?

Re: AES Decodieren

Verfasst: 02.05.2010 02:08
von Kumpu
Ach, einfach die Größe eines Zeichens hmm?

Re: AES Decodieren

Verfasst: 02.05.2010 14:43
von Kumpu
Funktioniert auch nicht! Da kommt beim dekodieren nur nonsens raus...
Ist es schlimm wenn ich für den Key anstatt ?Key @PW$ nehme? Ich meine wenn ich einen 128 Bit Schlüssel habe dann müsste ich doch eigentlich 16 Zeichen also 16*8 Bits nehmen. Aber wenn ich den Key aus deinem Beispiel nehme kommt auch nur Müll raus. :(

Re: AES Decodieren

Verfasst: 02.05.2010 14:52
von ts-soft
Ich weiß nicht was bei Dir nicht stimmt, obiges Beispiel von mir funktioniert ohne jegliche Änderung.

Also:
Welche PB Version?
Welches OS?
Welche Compilereinstellungen?

Aber davon unabhängig sollte SizeOf(Character) immer funktionieren.