Seite 1 von 1

Xor Verschlüsselung geht mit einer aussnahme nicht

Verfasst: 29.01.2005 22:25
von Kooky
Hi,
habe diesen kleinen ver/entschlüsselungs Code irgendwann mal hier aus dem Forum geklaut und vll. auch umgeschrieben ( ist schon lange her )
Nun wollte ich den Code für ein Netzwerkprogramm verwenden.
Ich hab diese Verschlüsselungstechnik schon öfters benutzt und sie hat sich immer als sehr gut erwiesen, aber irgendwie (?!) funktioniert sie mit einen bestimmten string nicht und ich dachte vielleicht könnt ihr mit helfen woran es liegt:

Code: Alles auswählen

Procedure.s EnCodeString(file.s)
     Length.l = Len(file.s)
     *Address = AllocateMemory(Length)
     PokeS(*Address, file.s, Length)
     KeyByte.l = %10010101
     For a.l = 0 To Length - 1
       Byte.b = PeekB(*Address + a)
       c.b = Sin(a) * 220
       d.b = Cos(a-32) * a
       KeyByte = Byte ! KeyByte ! c ! d ! length
       PokeB(*Address + a, KeyByte)
     Next
     file.s = PeekS(*Address, Length)
     FreeMemory(*Address)
    ProcedureReturn file.s
EndProcedure

Procedure.s DeCodeString(file.s)
     Length.l = Len(file.s)
     *Address = AllocateMemory(Length)
     PokeS(*Address, file.s, Length)
     Keybyte.l = %10010101
     For a.l = 0 To Length - 1
       Byte.b = PeekB(*Address + a)
       c.b = Sin(a) * 220
       d.b = Cos(a-32) *a
       PByte.b = Byte ! KeyByte ! c ! d ! length
       KeyByte = Byte
       PokeB(*Address + a, PByte)
     Next
     file.s = PeekS(*Address, Length)
     FreeMemory(*Address)
    ProcedureReturn file.s
EndProcedure


a.s = "Hallo, das ist ein Test! ;-)"
Debug "a: "+Chr(34)+a+Chr(34) ; a Unverschlüsselt
a = encodestring(a)
Debug "a: "+Chr(34)+a+Chr(34) ; a Verschlüsselt
a = decodestring(a)
Debug "a: "+Chr(34)+a+Chr(34) ; a wieder Entschlüsselt

b.s = "CMstart css"
Debug "b: "+Chr(34)+b+Chr(34) ; b Unverschlüsselt
b = encodestring(b)
Debug "b: "+Chr(34)+b+Chr(34) ; b Verschlüsselt
b = decodestring(b)
Debug "b: "+Chr(34)+b+Chr(34) ; b wieder Entschlüssel - Doch leider nicht richtig :(
Wie ihr seht, wird 'a' richtig verschlüsselt und entschlüsselt und 'b' wird nicht richtig entschlüsselt, bzw. verschlüsselt. Das passiert nur wenn 'b' = "CMstart css" ist. Eigentlich ist es mir ja egal, ich könnte ja für mein programm einfach b umbenennen, aber ich habe angst, dass es öfters passieren könnte. Ich zweifel quasi an der zuverlässigkeit von meinem dem Code :|
Wäre toll, wenn jemand herrausfinden könnte, woran das liegt :)

mfg. Kooky <)

Verfasst: 29.01.2005 23:30
von Froggerprogger
Wenn man im Encode-Teil ein

Code: Alles auswählen

Debug KeyByte
vor der Zeile

Code: Alles auswählen

PokeB(*Address + a, KeyByte)
einfügt, sieht man ja, welche Bytes geschrieben werden.
Bei deinem 2. Beispiel wird das letzte Zeichen zu 0!
Da Du aber weiterhin mit Strings arbeiten willst (die ja alle nullterminiert sind), wird somit im weiteren Verlauf (spätestens bei ProcedureReturn Dein String als ein Zeichen kürzer gelesen (da die 0 schon vorher kommt), und die Daten im Folgenden völlig unbrauchbar.
Entweder musst Du Dich von Strings verabschieden, und nur mit Zeigern auf Speicherbereiche einer gewissen Länge arbeiten, oder Du musst ausschließen, dass irgendwo innerhalb eines Strings das Zeichen mit ASCII-Wert 0 auftaucht.

Verfasst: 30.01.2005 00:02
von Kooky
aha :)
Dankeschön =)

Verfasst: 01.02.2005 15:55
von NicTheQuick
Oh, ein schöner alter Code von mir. Wo gibts denn sowas noch? :freak: :lol: