AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie soll ich eine Zeichenkette verschlüsseln?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie soll ich eine Zeichenkette verschlüsseln?

Ein Thema von Aurus · begonnen am 20. Jan 2006 · letzter Beitrag vom 20. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
Aurus

Registriert seit: 26. Aug 2005
Ort: Schweiz
53 Beiträge
 
#1

Wie soll ich eine Zeichenkette verschlüsseln?

  Alt 20. Jan 2006, 10:53
Hallo

Ich habe zwar zuerst die Suche benützt aber nicht konkretes auf mein Problem gefunden.


Ich will einen Zeichenketten z.B "123.dssdfersd.2er5rre" (Ist eine Kundennummer) mit XOR verschlüsseln.
Der Schlüsseln(100 Stellen) wurde mit einem Zufallsgenerator generiert und jede Stelle hat einen
Wert zwischen 0-255;

Jezt kann sein dass durch die XOR-Verschlüsselung gewissen Zeichen den Wert 0 oder einen anderen Wert haben dem kein Zeichen zusteht.


Nun möchte ich diese Zeichenkette einer DLL übergeben. Doch Strings darf manja nicht überbegen.

Wenn ich ihn als PChar übergeben wird die Zeichenkette auf einmal gekürzt wenn z.B. der Wert Null auftaucht da das immer das Ende eines PCahrs ist.


Wie soll ich das Problem lösen?

Soll ich die Zeichenkette in einem Stream übergeben oder gibt es da einfachere und elegantere Lösungen?


Gruss

Aurus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Wie soll ich eine Zeichenkette verschlüsseln?

  Alt 20. Jan 2006, 11:06
Man könnte dafür ja einen Record, oder ein Array verwenden.

Wenn z.B. die Zeichenfolge nicht länger als 100 Zeichen ist, dann

Delphi-Quellcode:
Type T = Record
    Data: packed Array[0..100] of Byte;
  End;
oder

Type T = packed Array[0..100] of Byte; Wenn du solchene Datenstruktur übergibst, dann wird ja nichts mehr abgeschnitten, da ja eine feste Größe angegeben ist.


es könnte z.B. so aussehn (ungetestet, aber es sollte funktionieren)
Delphi-Quellcode:
Var S: String;
  R: packed Array[0..100] of Byte;

// S an R übergeben und verschlüsseln
Move(@R[0], @S[1], Length(S) + 1);
For i := 0 to 100 do
  R[i] := R[i] xor Schlüssel[i];

// R entschlüsseln und an S übergeben
For i := 0 to 100 do
  R[i] := R[i] xor Schlüssel[i];
S := PChar(@R[0]);
$2B or not $2B
  Mit Zitat antworten Zitat
Aurus

Registriert seit: 26. Aug 2005
Ort: Schweiz
53 Beiträge
 
#3

Re: Wie soll ich eine Zeichenkette verschlüsseln?

  Alt 20. Jan 2006, 11:22
Hallo himitsu


Die Idee mit einem Array mit fester Grösse hatte ich auch schon.

Das geht sicher, nur ich bin sehr negativ auf feste grössen eingestellt,
da es sein kann dass ich später das Programm ändere und vielleicht auf einmal nicht 100 sondern 100'000 Zeichen übermittle.

Ich möchte eher was Variables. Gibt es da keine elegantere/flexiblere Lösung


Gruss

Aurus
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#4

Re: Wie soll ich eine Zeichenkette verschlüsseln?

  Alt 20. Jan 2006, 11:32
must du die daten denn auch wieder entschlüsseln?

oder würde es reichen das ganze zu hashen und dann immer zu vergeleichen?
das wäre wesentlich einfacher, da du bei md5 zB immer 32 Zeichen hättest die nur aus 0..9 und A..F bestehen....
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Aurus

Registriert seit: 26. Aug 2005
Ort: Schweiz
53 Beiträge
 
#5

Re: Wie soll ich eine Zeichenkette verschlüsseln?

  Alt 20. Jan 2006, 11:37
hallo glkgereon


Ich ich entschlüssle die Zeichenkette wieder und hänge zusätzlich noch was dran, verschlüssle es wieder mit einem Zufallsschlüssel und schicke es wieder ans Programm zurück.


Gruss

Aurus
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Wie soll ich eine Zeichenkette verschlüsseln?

  Alt 20. Jan 2006, 11:40
So, äh... Einen Pointer sowie die Anzahl der Bytes kann man doch an eine DLL übermitteln, oder?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: Wie soll ich eine Zeichenkette verschlüsseln?

  Alt 20. Jan 2006, 11:42
Ich wuerde den String nach der Verschluesselung auf lesbare Zeichen expandieren.
Die einfachste Methode ist die Hexziffern der Bytes zu nehmen.

Eleganter ist es, den String als Bitstrom zu verstehen.
Eine Tabelle von 32 oder 64 lesbaren Zeichen nehmen und dann je 5 bzw. 6 Bits der Daten in ein Zeichen umsetzen.
Das Resultat ist ein laengerer String mit garantiert lesbaren Zeichen.
  Mit Zitat antworten Zitat
Aurus

Registriert seit: 26. Aug 2005
Ort: Schweiz
53 Beiträge
 
#8

Re: Wie soll ich eine Zeichenkette verschlüsseln?

  Alt 20. Jan 2006, 11:45
Hallo

Vermutlich hast du recht mit Pointer. Damit habe ich sehr sehr wenig Erfahrung und ist mir ein graus.
Könnte man das nicht ein Stream verwenden?
Darf man streams überhaupt einer DLL übergeben?


Leider hat der Zeichenkette/String nach der Verschlüsselung auch keine Lesebaren Zeichen mehr
Da der mit XOR und einem Schlüssel mit Werten zwischen 0-255 verschlüsselt wird.

Wie kann ich machen dass die Zeichen "lesbar" bleiben ?
Das mit den 5/6 Bit habe ich nicht verstanden.

Gruss

Aurus
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Wie soll ich eine Zeichenkette verschlüsseln?

  Alt 20. Jan 2006, 12:14
Zitat von Aurus:
Wie kann ich machen dass die Zeichen "lesbar" bleiben ?
Das mit den 5/6 Bit habe ich nicht verstanden.
Robert meint die Base64-Kodierung. Diese wird zum Beispiel auch beim Senden von Emails angewandt.
Daniel Schuhmann
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: Wie soll ich eine Zeichenkette verschlüsseln?

  Alt 20. Jan 2006, 12:16
Man kann einer DLL natuerlich beliebige Daten in einem Puffer uebergeben. PChar ist ja auch nichts anderes.
Es besteht nur die Vereinbarung das der Inhalt ein String ist der an einem #0 aufhoert.

Was du uebergeben willst ist ein Puffer plus Groessenangabe des Puffers und Laengenangabe des Inhalts.
In der DLL darf man dann nicht C-String-Verarbeitung treiben. Man benutzt die Laengenangabe um die Daten zu entschluesseln und die Groessenangabe um herauszubekommen ob die Ergaenzungen noch in den Puffer passen.

Das mit der Umarbeitung in lesbare Zeichen kann man dann lassen.

Es muss natuerlich die DLL umgeschrieben werden.

Als Alternative kann der XOR-Schluessel so gewaehlt werden das nie ein #0 Zeichen im verschluesselten String auftaucht.
Dazu muss nur sichergestellt werden das nie zwei gleiche Zeichen aufeinandertreffen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz