Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi String ver-/ entschlüssel - einfach ohne Sonderzeichen (https://www.delphipraxis.net/200617-string-ver-entschluessel-einfach-ohne-sonderzeichen.html)

Alex_ITA01 8. Mai 2019 08:46

String ver-/ entschlüssel - einfach ohne Sonderzeichen
 
Moin zusammen,
ich habe schon diverse Verschlüsselungen versucht die auch funktionieren (Xor, Polyalphabetische Substitution).
Leider benötige ich eine Verschlüsselungsvariante, welche keine Sonderzeichen generiert, da ich das Ergebnis als Ordner auf der Festplatte erstellen möchte (aus Datenschutzgründen darf der Ordnername nicht lesbar sein).
Falls jemand denkt das damit Schindluder betrieben wird, dem möchte ich gleich widersprechen und auch keine Diskussion dazu anfangen.
Kennt jemand von euch solche Verfahren ohne Sonderzeichen?
Der InputStr könnte so aussehen:

Delphi-Quellcode:
MyStr_GeilerName
Danke schonmal für eure Anregungen

Andreas13 8. Mai 2019 08:57

AW: String ver-/ entschlüssel - einfach ohne Sonderzeichen
 
Hi Alex,

vor kurzem habe ich einen möglichen Lösungsvorschlag geschildert, der auch zu Deiner Aufgabenstellung passen würde:

https://www.delphipraxis.net/200188-...ml#post1428892

Gruß
Andreas

Uwe Raabe 8. Mai 2019 09:14

AW: String ver-/ entschlüssel - einfach ohne Sonderzeichen
 
Du kannst ja wie gewohnt in eine beliebige Byte-Sequenz verschlüsseln und das Ergebnis dann mit Base64 in einen brauchbaren String umwandeln.

Schokohase 8. Mai 2019 09:16

AW: String ver-/ entschlüssel - einfach ohne Sonderzeichen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1431781)
Du kannst ja wie gewohnt in eine beliebige Byte-Sequenz verschlüsseln und das Ergebnis dann mit Base64 in einen brauchbaren String umwandeln.

Nein, das geht so nicht, denn Base64 verwendet Zeichen die nicht als Dateinamen verwendet werden dürfen.

Das Prinzip wie bei Base64 eine Byte-Folge in eine Zeichenkette kodiert wird ist aber der richtige Weg, man darf halt nur gültige Zeichen verwenden.

Siehe Wikipedia
Zitat:

Bei Dateinamen oder URL können die Zeichen
Delphi-Quellcode:
+
,
Delphi-Quellcode:
/
und
Delphi-Quellcode:
=
nicht verwendet werden, da sie dort für besondere Funktionen reserviert sind. In einem solchen Fall wird mit „base64url“ eine inkompatible Abwandlung beschrieben. Die Zeichen
Delphi-Quellcode:
+
und
Delphi-Quellcode:
/
werden dann durch
Delphi-Quellcode:
-
(Minus, ASCII 2Dhex) und
Delphi-Quellcode:
_
(Unterstrich, ASCII 5Fhex) ersetzt. Das Füllzeichen
Delphi-Quellcode:
=
am Ende wird prozentkodiert zu %3d, kann aber entfallen, wenn die Länge des Strings bekannt ist.

Andreas13 8. Mai 2019 09:44

AW: String ver-/ entschlüssel - einfach ohne Sonderzeichen
 
Hi Alex,

das habe ich zuvor eigentlich gemeint: Wandle Dein verschlüsseltes Passwort in einen Hexadezimal-String um, den Du als Verzeichnis-Name verwenden kannst.
Delphi-Quellcode:
Function ShortString_To_HexString(S : ShortString): AnsiString; // Hexadezimal-String-Array
Type
  CharHexType = String[2];
 
VAR
  c     : Array[0..255] of Byte ABSOLUTE S;
  Len, i : Integer;
  SS    : AnsiString; // verschlüsseltes Passwort als HexString-Array
  CharHex: CharHexType;
  SHex  : Array[0..255] of CharHexType; // Stelle 0 = Länge als Hex-Zahl!   

Begin
  Len := ord(S[0]);

  SHex[0] := IntToHex(Len,2); // LängenHex-Zahl

  For i := 1 To Len Do
  Begin
    // Verschlüsselten String S in ein Hexadezimal-String-Array umwandeln:
    CharHex := IntToHex(c[i],2);
    SHex[i] := CharHex;
  End;

  // AnsiString schreiben:
  SS := '';
  For i:= 0 {!!! auch Längen-Hex-Zahl!!!} To Len Do
  Begin
    SS := SS + SHex[i];
  End;
  Result := SS;
End;

Andreas L. 8. Mai 2019 11:47

AW: String ver-/ entschlüssel - einfach ohne Sonderzeichen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich verwende zum verschlüsseln das DEC (Delphi Encryption Compedium) von Hagen Redman. Kostenloser Download:

Ich verwende DEC 5.2. Die obere Variante ist für neuere Delphi-Versionen.

Beispiel-Code:
Delphi-Quellcode:
function TfrmStringEncrypter.Crypt(
  AText: RawByteString;
  APassword: RawByteString;
  AAlgorithm: TCipherAlgorithm = caBlowfish;
  AEncrypt: Boolean = True): RawByteString;
var
  Cipher: TDECCipher;
begin
  // Cipher erzeugen
  Cipher := Self.GetCipherClass(AAlgorithm).Create;

  // initialisieren
  Cipher.Init(APassword);

  // String ent-/ver-schlüsseln
  if AEncrypt then
    Result := Cipher.EncodeBinary(AText)
  else
    Result := Cipher.DecodeBinary(AText);

  // Speicher freigeben
  FreeAndNil(Cipher);
end;
Komplettes Demo-Projekt im Anhang!

scrat1979 8. Mai 2019 12:35

AW: String ver-/ entschlüssel - einfach ohne Sonderzeichen
 
Wie oben erwähnt zum Beispiel mit XOR verschlüsseln und das Ergebnis in einen Hex-String umwandeln. Dann hast du natürlich nur die Zeichen 0-9 sowie A-F :)

Delphi.Narium 8. Mai 2019 12:41

AW: String ver-/ entschlüssel - einfach ohne Sonderzeichen
 
Musst Du nur verschlüsseln oder auch entschlüsseln?

Wenn nur verschlüsseln:

MD5-Summe bilden und die als Verzeichnisnamen nehmen.

Zeichen 0-9 und A-F.

Alle Verzeichnisnamen sind gleich lang, damit ist auch über die Länge des Verzeichnisnamens kein Rückschluss auf die Länge der verschlüsselten Zeichenfolge möglich.

Eine "Restaurierung" der verschlüsselten Zeichenfolge anhand der MD5-Summe ist ebenfalls nicht möglich.

Der Weg "Zeichenfolge -> Verzeichnisname" ist demnach eine Einbahnstraße.

Alex_ITA01 8. Mai 2019 20:05

AW: String ver-/ entschlüssel - einfach ohne Sonderzeichen
 
Danke für die Anregungen.
Das mit xor und dann in Hex umwandeln werde ich mal versuchen, hört sich gut an.
Ich will verschlüsseln und entschlüsseln, zur Info ;-)

TurboMagic 8. Mai 2019 20:20

AW: String ver-/ entschlüssel - einfach ohne Sonderzeichen
 
Zitat:

Zitat von Andreas L. (Beitrag 1431787)
Ich verwende zum verschlüsseln das DEC (Delphi Encryption Compedium) von Hagen Redman. Kostenloser Download:

Ich verwende DEC 5.2. Die obere Variante ist für neuere Delphi-Versionen.

[/DELPHI]

Im Development Branch befindet sich übrigens eine V6.0 Alpha, compilierbar bis inklusive Rio und
so umgebaut, dass diese auch auf anderen Plattformen funktioniert. Zumindest für die Hash-Algorithmen ist schon ein
FMX basiertes Demo Program dabei, welches ich auch schon in Google Play als DEC Hash Demo veröffentlicht habe.

In der DECFormat.pas Unit (ja, V6.0 nennt einige Units sprechender) gibt es sicher Formate (wie Hex) die keine
in Dateinamen verbotenen Sonderzeichen produzieren.

Grüße
TurboMagic


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:19 Uhr.
Seite 1 von 2  1 2      

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