AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Verschlüsselungsalgorithmus unicodefähig machen (kyrillische Buchstaben)
Thema durchsuchen
Ansicht
Themen-Optionen

Verschlüsselungsalgorithmus unicodefähig machen (kyrillische Buchstaben)

Ein Thema von DieDolly · begonnen am 18. Nov 2019 · letzter Beitrag vom 19. Nov 2019
Antwort Antwort
Seite 1 von 2  1 2      
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

Verschlüsselungsalgorithmus unicodefähig machen (kyrillische Buchstaben)

  Alt 18. Nov 2019, 22:07
Aus den Weiten des Internets habe ich irgendwann mal diesen Code aufgegriffen.
Der funktioniert mit lateinischen Buchstaben, Umlauten und typische französische Zeichen wie à, Í und viele mehr.

Mit kyrillischen Buchstaben hat er aber seine Probleme und ich weiß nicht genau warum. Kann mir jemand helfen?
Delphi-Quellcode:
function RandomString(Chars: string; StringLength: Integer): string;
var
 i, x: Integer;
begin
 Result := '';
 for i := 0 to StringLength- 1 do
  begin
   x := Length(Chars) - Random(Length(Chars));
   Result := Result + Chars[x];
   Chars := Copy(Chars, 1, x - 1) + Copy(Chars, x + 1, Length(Chars));
  end;
end;

// Verschlüsseln
function EncodeStr(const Data, SecurityString: string; MinV: Integer = 0; MaxV: Integer = 5): string;
const
 aAlphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';
var
 i, x: Integer;
 s1, s2, ss: string;
begin
 if (Trim(Data) = '') or (Length(SecurityString) < 16) then
  begin
   Result := '';
   Exit;
  end;

 if MinV > MaxV then
  begin
   i := MinV;
   MinV := MaxV;
   MaxV := i;
  end;

 if MinV < 0 then
  MinV := 0;
 if MaxV > 100 then
  MaxV := 100;

 Result := '';

 for i := 1 to Length(SecurityString) do
  begin
   s1 := Copy(SecurityString, i + 1, Length(SecurityString));
   if Pos(SecurityString[i], s1) > 0 then
    Exit;
   if Pos(SecurityString[i], aAlphabet) <= 0 then
    Exit;
  end;

 s1 := aAlphabet;
 s2 := '';
 for i := 1 to Length(SecurityString) do
  begin
   x := Pos(SecurityString[i], s1);
   if x > 0 then
    s1 := Copy(s1, 1, x - 1) + Copy(s1, x + 1, Length(s1));
  end;

 ss := SecurityString;
 for i := 1 to Length(Data) do
  begin
   s2 := s2 + ss[Ord(Data[i]) mod 16 + 1];
   ss := Copy(ss, Length(ss), 1) + Copy(ss, 1, Length(ss) - 1);
   s2 := s2 + ss[Ord(Data[i]) div 16 + 1];
   ss := Copy(ss, Length(ss), 1) + Copy(ss, 1, Length(ss) - 1);
  end;

 Result := RandomString(s1, Random(MaxV - MinV) + MinV + 1);

 for i := 1 to Length(s2) do
  Result := Result + s2[i] + RandomString(s1, Random(MaxV - MinV) + MinV);
end;

// Entschlüsseln
function DecodeStr(Data: string; const SecurityString: string): string;
const
 aAlphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';
var
 i, x, x2: Integer;
 s1, s2, ss: string;
begin
 Result := #1;
 if (Trim(Data) = '') or (Length(SecurityString) < 16) then
  begin
   Result := '';
   Exit;
  end;

 for i := 1 to Length(SecurityString) do
  begin
   s1 := Copy(SecurityString, i + 1, Length(SecurityString));
   if Pos(SecurityString[i], s1) > 0 then
    Exit;
   if Pos(SecurityString[i], aAlphabet) <= 0 then
    Exit;
  end;

 s1 := aAlphabet;
 s2 := '';
 ss := SecurityString;
 for i := 1 to Length(Data) do
  begin
   if Pos(Data[i], ss) > 0 then
    s2 := s2 + Data[i];
  end;

 Data := s2;
 s2 := '';
 if Length(Data) mod 2 <> 0 then
  Exit;

 for i := 0 to Length(Data) div 2 - 1 do
  begin
   x := Pos(Data[(i * 2) + 1], ss) - 1;

   if x < 0 then
    Exit;

   ss := Copy(ss, Length(ss), 1) + Copy(ss, 1, Length(ss) - 1);
   x2 := Pos(Data[(i * 2) + 2], ss) - 1;

   if x2 < 0 then
    Exit;

   x := x + (x2 * 16);
   s2 := s2 + Chr(x);

   ss := Copy(ss, Length(ss), 1) + Copy(ss, 1, Length(ss) - 1);
  end;
 Result := s2;
end;
Testfälle
Delphi-Quellcode:
const
 S: string = 'Србија'; // sobald kyrillische Buchstaben vorkommen, ergeben "a" und "b" keine verwertbaren Daten mehr
var
 a, b: string;
begin
 a := EncodeStr(S, 'GvfLCc3qWYwx4FuU'); // "S" verschlüseln und in "a" speichern
 ShowMessage(a);

 b := DecodeStr(a, 'GvfLCc3qWYwx4FuU'); // Den verschlüsselten Inhalt von "a" entschlüsseln und in "b" speichern
 ShowMessage(b);
Wenn das alles gar nix ist - gibt es andere, schnell implementierte und ohne Extrabibliotheken verfügbare Verschlüsselungsmethoden, die man in Delphi und PHP zugleich umsetzen kann?

Geändert von DieDolly (18. Nov 2019 um 22:16 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#2

AW: Verschlüsselungsalgorithmus unicodefähig machen

  Alt 18. Nov 2019, 22:13
Keine Ahnung was das genau zur, nur was ist überhaupt dein Zweck?
Verschlüsselungsbibliotheken für Delphi die nach bekannten Standards
arbeiten gibt es genügend. Warum nicht so eine nehmen?
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: Verschlüsselungsalgorithmus unicodefähig machen

  Alt 18. Nov 2019, 22:16
Der Zweck sollte doch klar sein. Damit verschlüssle und entschlüssle ich Zeichenketten.
Ich benutze keine vorgefertigte, weil ich die Funktionen aktuell in Delphi und PHP nutze.

Wenn der Code da oben mit kyrillischen Buchstaben zurecht kommen würde, wäre das viel mehr wert als irgendeine große Bibliothek zu nehmen, die dann nicht in PHP funktioniert.

Ich habe noch die Wolfgang-Erhardt-Units. Kann man damit mit wenigen Zeilen (in eine Wrapper-Unit verpackt) eine verschlüsselung aufbauen und in PHP einfach nachbilden?

Geändert von DieDolly (18. Nov 2019 um 22:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Verschlüsselungsalgorithmus unicodefähig machen (kyrillische Buchstaben)

  Alt 18. Nov 2019, 22:24
Verschlüsselungen arbeiten auf Byte-Ebene.
Dein Algorithmus geht vermutlich davon aus das 1 Character = 1 Byte ist.
Damit klapptes es bis Delphi 2007, aber nicht mehr danach.

Du musst deinen String in einen Memorystream packen und dann die einzelnen Bytes codieren.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: Verschlüsselungsalgorithmus unicodefähig machen (kyrillische Buchstaben)

  Alt 18. Nov 2019, 22:28
Das wird dann vermutlich dieser Abschnitt hier sein
Delphi-Quellcode:
 for i := 1 to Length(Data) do
  begin
   s2 := s2 + ss[Ord(Data[i]) mod 16 + 1];
   ss := Copy(ss, Length(ss), 1) + Copy(ss, 1, Length(ss) - 1);
   s2 := s2 + ss[Ord(Data[i]) div 16 + 1];
   ss := Copy(ss, Length(ss), 1) + Copy(ss, 1, Length(ss) - 1);
  end;
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Verschlüsselungsalgorithmus unicodefähig machen (kyrillische Buchstaben)

  Alt 18. Nov 2019, 23:56
Nimm wie weiter oben erwähnt eine Bibliothek, welche wirklich verschlüsselt.

Der von dir verwendete Algorithmus wäre bereits in den 40er Jahren des letzten Jahrtausends innert Kürze geknackt worden - der Algo entspricht in etwa Verschlüsselungstechniken wie man sie im 15. Jahrhundert angewendet hat.
Michael Gasser
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: Verschlüsselungsalgorithmus unicodefähig machen (kyrillische Buchstaben)

  Alt 19. Nov 2019, 00:11
Kann man mit den Wolfang Erhardt-Codes was anfangen und wenn ja wie, sodass auch in PHP eine Abbildung funktioniert?
Ob das geknackt werden kann oder nicht ist mir egal. Es soll nur nicht auf den ersten Blick lesbar sein.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: Verschlüsselungsalgorithmus unicodefähig machen (kyrillische Buchstaben)

  Alt 19. Nov 2019, 07:44
Es soll nur nicht auf den ersten Blick lesbar sein.
Wenn es nicht wirklich sicher sein muss, würde dafür ja schon ein Base64-Encoding genügen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: Verschlüsselungsalgorithmus unicodefähig machen (kyrillische Buchstaben)

  Alt 19. Nov 2019, 07:47
Kleine, neugierige Kinder sollten nicht direkt dahinterkommen

Gibt es denn sonst noch recht einfache Verschlüsselungen, hinter die ein normaler Mensch bzw etwas besserer PC-Nutzer nicht direkt kommt?
Ich rede nicht von Super-Nerds.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

AW: Verschlüsselungsalgorithmus unicodefähig machen (kyrillische Buchstaben)

  Alt 19. Nov 2019, 07:55
Was hast Du gegen Base64? Zumindest ich kann das nicht ohne Decoding lesen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Alt 19. Nov 2019, 08:02     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
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 12:21 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