AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit DCPcrypt

Ein Thema von DLX · begonnen am 24. Mai 2018 · letzter Beitrag vom 18. Jun 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Probleme mit DCPcrypt

  Alt 24. Mai 2018, 21:11
Ersetze bei Dir   form1.Memo1.Lines.Add(Data); mit   form1.Memo1.Lines.Add(Trim(Data)); und dann passt es.
In der DecryptText() funktion, falls das unklar ist.

ps: Ich habe die Sourceforge Variante genommen.
pps: Der Fehler ist das der Speicher überschrieben wird aber keine neue Länge bekommt.
Gruß vom KodeZwerg

Geändert von KodeZwerg (24. Mai 2018 um 21:14 Uhr)
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: Probleme mit DCPcrypt

  Alt 24. Mai 2018, 21:32
pps: Der Fehler ist das der Speicher überschrieben wird aber keine neue Länge bekommt.
Huh? Wo wird Speicher überschrieben?

Beim Verschlüsseln wird Data auf ein Vielfaches von 16 aufgefüllt (ohne Speicherüberschreibung).

Ich nehme ja wohl an, dass dieser verschlüsselte Text dann komplett wieder entschlüsselt wird. Da die Länge ein Vielfaches von 16 ist, kann er im CBC-Mode verarbeitet werden. Was übrigbleibt nach dem Entschlüsseln ist der Klartext+Padding, was noch entfernt werden muss.

Das Padding hängt n Bytes AnsiChar(n) an, wobei n = 16 - mod Klartextlänge ist. Mein Pseudocode macht das rückgängig.
Ersetze bei Dir   form1.Memo1.Lines.Add(Data); mit   form1.Memo1.Lines.Add(Trim(Data)); und dann passt es.
In der DecryptText() funktion, falls das unklar ist.
Das wäre natürlich tödlich, da zB auch #9, #10, #13 entfernt würden. Der komplette Ciphertext ist relevant.

Edit: Sehe gerade das über Base64 gegangen wird, da sollte trim kein Problem sein, weil im Base64 keine relevanten Nicht-Ansidaten vorhanden sind. Aber das kann nicht das Problem sein, weil DCPBase64.Base64DecodeStr(Data) einen Fehler werfen müsste, falls ungültige Zeichen auftauchen.

Geändert von gammatester (24. Mai 2018 um 21:48 Uhr) Grund: Base64
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Probleme mit DCPcrypt

  Alt 24. Mai 2018, 21:46
Im Anhang ein dreckiges aber lauffähiges Beispiel.
Umgang:
Bei Erststart tippe da wo Edit1 steht etwas ein was Du verschlüsseln magst
Drücke Knopf Button1
In Memo erscheint der Base64 String kopiere ihn
Ersetze Edit1 mit dem String
Drücke Knopf Button2

Klappts?
Angehängte Dateien
Dateityp: 7z Project1.7z (196,0 KB, 11x aufgerufen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#4

AW: Probleme mit DCPcrypt

  Alt 24. Mai 2018, 21:50
Wäre es nicht sinnvoller den Quellcode zu posten, als ein nacktes EXE?
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Probleme mit DCPcrypt

  Alt 24. Mai 2018, 21:55
Wäre es nicht sinnvoller den Quellcode zu posten, als ein nacktes EXE?
Das tat ich.
Ersetze bei Dir   form1.Memo1.Lines.Add(Data); mit   form1.Memo1.Lines.Add(Trim(Data)); und dann passt es.
In der DecryptText() funktion, falls das unklar ist.
Der Rest vom Quelltext steht in Post #1 vom TE.

edit
Im Anhang der Source zum Sample
Angehängte Dateien
Dateityp: 7z DCPcrypt.7z (1,3 KB, 12x aufgerufen)
Gruß vom KodeZwerg

Geändert von KodeZwerg (24. Mai 2018 um 22:01 Uhr)
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#6

AW: Probleme mit DCPcrypt

  Alt 24. Mai 2018, 22:37
Dein Sourcecode und wohl auch die Exe enthalten kein Entfernen des Paddings und ergeben deshalb Schrott. Mit dieser meiner Änderung funktionierts

Verschlüsseln
'Edit1' -> 'zwag7rEW4OWtTLpCHdbyoA=='

Entschlüsseln:
'zwag7rEW4OWtTLpCHdbyoA==' -> 'Edit1'
Delphi-Quellcode:
function DecryptText():String;
var Cipher : TDCP_rijndael;
    Data, Key, IV : ansistring;
    index, dataLength, bsize, pad: integer;
begin
  key := '12345678901234567890123456789012';
  IV := '1234567890123456';
  Data := DCPBase64.Base64DecodeStr(form1.Edit1.text);
  Cipher := TDCP_rijndael.Create(NIL);
  try
    Cipher.Init(Key[1],128,@IV[1]);
    Cipher.DecryptCBC(Data[1],Data[1],Length(Data));
    pad := 16- ord(Data[length(Data)]);
    for index :=1 to pad do delete(Data,length(Data),1);
  finally
    Cipher.Burn;
    Cipher.Free;
  end;
  form1.Memo1.Lines.Add(Data);
end;

Geändert von gammatester (25. Mai 2018 um 00:07 Uhr) Grund: Trim entfernt
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Probleme mit DCPcrypt

  Alt 24. Mai 2018, 22:49
Dein Sourcecode und wohl auch die Exe enthalten kein Entfernen des Paddings und ergeben deshalb Schrott.
?
Wenn man natürlich stur seinen Willen haben möchte ohne überhaupt mal das andere ausprobiert zu haben.
Nutze mein .exe oder .dpr und bau eigenes .exe
Bedien es wie ich schrieb
Was soll bitteschön Schrott sein?
Hättest Du geschrieben das meine Methode Schrott ist weil sie führende oder abschließende Leerzeichen entfernt, da hät ich Dir Recht gegeben aber Grundlos so etwas zu Schreiben. Ich bin raus.

edit
und das beste, ohne Trim funktioniert dein Source null. Tolle Leistung. Aber mein Source = Schrott.
Gruß vom KodeZwerg

Geändert von KodeZwerg (24. Mai 2018 um 23:01 Uhr)
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#8

AW: Probleme mit DCPcrypt

  Alt 25. Mai 2018, 00:03
Sorry, falls der Ton etwas rauh war.

Aber Dein Programm funktioniert, nur wenn der Text keine Ansizeichen <= 32 am Ende hat. Das ist vielleicht für das Ver/Entschlüsseln von Edit-Felder OK, aber nicht für allgemeine Daten. Aber selbst führende Leerzeichen werden weggetrimmt.

Versuche einmal ' a b c ' mit Deiner Version zu verarbeiten. Mit dem trim gibt das Entschlüsseln 'a b c', und wenn man das trim entfernt: ' a b c ???????' (im Original: Krakel statt ?)

Der Ciphertext ist für beide Versionen 'YEasidM6jJlOuYsjSFIliA=='

Allerdings muss ich sagen, das es für solche eingeschränkten Daten (also ohne führende und angehängte Leer- und Steuerzeichen) in der Tat zu funktioieren scheint, weil die Padding-Bytes <= #16 sind, die beim trim dann entfernt werden.

Und mein Program funktioniert auch nur, wenn das trim entfernt wird (aber das war schon vorhanden, ich wollte nur das De-Padding einbauen, habe das trim jetzt im Code entfernt). Ich verstehe nicht, wieso es mein Code bei Dir nicht funktioniert, wenn das Trim entfernt wird.

Gute Nacht
Gammatester

Geändert von gammatester (25. Mai 2018 um 00:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Probleme mit DCPcrypt

  Alt 25. Mai 2018, 00:48
Ok gammatester, nur für Dich um Dir zu zeigen was da so passiert bei mir mit Deiner Änderung in Deiner letzten Variante.
Ich habe nun zwei Checkboxen drinn, GUI mini aufgewertet.
Checkbox1 ist dein Padding, On/Off.
Checkbox2 ist mein Trim, On/Off.
GUI ist diesmal beschriftet.

Delphi-Quellcode:
function DecryptText():String;
var Cipher : TDCP_rijndael;
    Data, Key, IV : ansistring;
    index, dataLength, bsize, pad: integer;

begin
  key := '12345678901234567890123456789012';
  IV := '1234567890123456';
  Data := form1.Edit1.text;
  Data := DCPBase64.Base64DecodeStr(Data);
  Cipher := TDCP_rijndael.Create(NIL);
  try
    Cipher.Init(Key[1],128,@IV[1]);

    Cipher.DecryptCBC(Data[1],Data[1],Length(Data));

    if form1.CheckBox1.Checked then
    begin
      pad := 16- ord(Data[length(Data)]);
      for index :=1 to pad do delete(Data,length(Data),1);
    end;

  finally
    Cipher.Burn;
    Cipher.Free;
  end;

  if form1.CheckBox2.Checked then
   form1.Memo1.Lines.Add(Trim(Data))
   else form1.Memo1.Lines.Add(Data);
  if form1.CheckBox2.Checked then
   form1.Edit1.Text := Trim(Data)
   else form1.Edit1.Text := Data;

end;
Im Anhang kompilat plus Source.
Sobald ich "mein" häckchen entferne, rate was passiert, das was der TE weg haben wollte erscheint wieder.
Angehängte Dateien
Dateityp: 7z DCPcrypt.7z (198,3 KB, 15x aufgerufen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#10

AW: Probleme mit DCPcrypt

  Alt 25. Mai 2018, 09:18
Moin,
ich konnte das Problem mit dem De-Padding reproduzieren. Ich habe in der Hektik meinen eigenen Pseudo-Code falsch umgesetzt . Mit dieser Änderung Deines Codes sollte es OK sein
Delphi-Quellcode:
    if form1.CheckBox1.Checked then
    begin
      pad := ord(Data[length(Data)]);
      for index :=1 to pad do delete(Data,length(Data),1);
    end;
Natürlich ist das trotzdem noch eine Schnell-Lösung. Ein robuster Code sollte auch noch checken, ob der eingegebene Text für die Entschlüsselung gültiges Base64 ist, ob die Ciphertext-Länge ein Vielfaches von 16 ist, etc.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 22:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz