Xor Verschlüsselung geht mit einer aussnahme nicht

Für allgemeine Fragen zur Programmierung mit PureBasic.
Kooky
Beiträge: 47
Registriert: 18.09.2004 16:13
Wohnort: München
Kontaktdaten:

Xor Verschlüsselung geht mit einer aussnahme nicht

Beitrag 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 <)
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag 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.
!UD2
Kooky
Beiträge: 47
Registriert: 18.09.2004 16:13
Wohnort: München
Kontaktdaten:

Beitrag von Kooky »

aha :)
Dankeschön =)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Oh, ein schöner alter Code von mir. Wo gibts denn sowas noch? :freak: :lol:
Antworten