AGB  ·  Datenschutz  ·  Impressum  







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

Dec 5.2 decodiert nicht richtig (Einstellungen)

Ein Thema von martinheidelberg · begonnen am 2. Okt 2012 · letzter Beitrag vom 3. Okt 2012
Antwort Antwort
martinheidelberg

Registriert seit: 14. Sep 2006
3 Beiträge
 
#1

Dec 5.2 decodiert nicht richtig (Einstellungen)

  Alt 2. Okt 2012, 21:43
Hi

ich will mit der DEC 5.2 einen Text (Passwörter) Verschlüsseln, in einer Datei speichern und bei Eingabe eines Masterpassworts wieder laden und entschlüsseln. Ich bin am verzweifeln. Habe mir viele Beispiele Angeschaut und soweit auch verstanden wie alles funktioniert. Ich poste mal meine En und Decrypt Funktionen, Sowie meine Aufrufe und die Ausgabe des Memos

Encrypt:
Delphi-Quellcode:
function Encrypt(const Value: String; const Password: String): String;
var
  Salt,SessionKey: Binary;
  MyCiph : TDECCipher;
begin
  MyCiph := ValidCipher(TCipher_Rijndael).Create;
  Salt := RandomBinary(16);
  try
    SessionKey := THash_SHA1.KDF2(Password, Salt, MyCiph.Context.keysize, TFormat_Copy);
    MyCiph.Mode := cmCTSx; // ein 8Bit Feedback Modus ist für kurze Datenmengen sicherer
    MyCiph.Init(SessionKey);
    Result := TFormat_MIME64.Encode(Salt + MyCiph.Encodebinary(Value, TFormat_Copy));
  finally
    MyCiph.Free;
    ProtectBinary(Salt);
    ProtectBinary(SessionKey);
  end;
end;
Decrypt:
Delphi-Quellcode:
function Decrypt(const Value: String; const Password: String): String;
var
  Salt,SessionKey: Binary;
  MyCiph : TDECCipher;
begin
  MyCiph := ValidCipher(TCipher_Rijndael).Create;
  try
    Result := TFormat_MIME64.Decode(Value);
    Salt := Copy(Result, 1, 16);
    SessionKey := THash_SHA1.KDF2(Password, Salt, MyCiph.Context.KeySize, TFormat_COPY);
    MyCiph.Mode := cmCTSx;
    MyCiph.Init(SessionKey);
    MyCiph.Decode(Result[17], Result[1], Length(Result)-16); // inplaced Entschlüsselung
    SetLength(Result, Length(Result) -16);
  finally
    MyCiph.Free;
    ProtectBinary(SessionKey);
  end;
end;
Aufruf in einem Button:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  rein: String;
  crypt : String;
  raus : String;
begin
  rein :='geheimer Text';
  Memo1.Lines.Add('Klar: ' +rein);
  crypt := encrypt(rein,'passwort');
  Memo1.Lines.Add('crypt: '+crypt);
  raus := decrypt(crypt,'passwort');
  memo1.Lines.Add('Klar: '+raus);
  Memo1.Lines.Add('--------------');
end;
Und meine Ausgabe sieht dann nach 2x auf den Button Klicken so aus:

Code:
Klar: geheimer Text
crypt: ZooKq8i9/HSzDFymXfexXpMTNMMaduonMzbU+Rs=
Klar: ⑴ጺ顭훝빇át³ \¦]
--------------
Klar: geheimer Text
crypt: wWwmW7P+VFYTRTxD+rY+jpHGl2Cndb2HA8+09Rs=
Klar: &#60654;&#53094;&#19665;&#15850;&#6069;&#30608;•VE<Cú
--------------
Zuletzt noch einige vom mir vermitete Fehlerquellen:
1. Bei Encrypt: .EncryptBinary
Bei Decrypt: .Decrypt
Ist das bei richtigen Parametern das gleiche?
2. .Init() wird nur mit einem Parameter aufgerufen,
erwartet aber eig. mehrere.
3. .Context.KeySize heißt in den meisten Beispielen immer
.MaxKeySize ... MaxKeySize gibt es aber in meiner DEC 5.2
nicht!!!
4. Wenn ich alle Strings als ByteRawString deklariere, bekomme
ich als Ausgabe immer erstmal einige Fragezeichen und dann
erst chinesische Zeichen.


Falls jemand spontan eine lösung hat, dass mir nichtmehr alles auf chinesisch übersetzt wird, wäre ich dafür sehr dankbar.

lg und vielen Dank
Martin
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Dec 5.2 decodiert nicht richtig (Einstellungen)

  Alt 2. Okt 2012, 23:44
ich habe ewig nichts mehr mit DEC gemacht, kann es sein dass Du diese Problem hast?

http://www.delphipraxis.net/148225-d...hi-2009-a.html
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
martinheidelberg

Registriert seit: 14. Sep 2006
3 Beiträge
 
#3

AW: Dec 5.2 decodiert nicht richtig (Einstellungen)

  Alt 2. Okt 2012, 23:57
Hi

Das klingt nicht schlecht... setz mich gleich nochmal dran. Danke!!
Ich habe Delphi XE3.

lg Martin
  Mit Zitat antworten Zitat
martinheidelberg

Registriert seit: 14. Sep 2006
3 Beiträge
 
#4

AW: Dec 5.2 decodiert nicht richtig (Einstellungen)

  Alt 3. Okt 2012, 00:03
In dem Thread schreibt der Autor, dass es bei ihm funktioniert solange er ansi Zeichen verwendet.
Bei mir funktioniert noch nicht mal das. Ich habe aber gemerkt, dass es bei einzelnen Buchstaben funktioniert (meistens... wenn ich 10 mal auf den Button drücke, kommt ca. 9 mal meine Eingabe zurück ... ab und an mal ein beliebiges Zeichen).
Weshalb ich vermute dass irgendwo etwas zu langes/kurzes ver bzw. entschlüsselt wird. Dadurch würde sich die Ausgabe ja verändern
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Dec 5.2 decodiert nicht richtig (Einstellungen)

  Alt 3. Okt 2012, 00:07
wie gesagt ich habe mich lange nicht mehr damit beschäftigt .... vielleicht kann negaH helfen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 3. Okt 2012 um 00:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Dec 5.2 decodiert nicht richtig (Einstellungen)

  Alt 3. Okt 2012, 01:45
Es scheint am MIME64 Encode & Decode zu liegen. Folgendes funktioniert:

Delphi-Quellcode:
function AESEncode(const Value: String; const Password: String): String;
var
  Cipher: TDECCipher;
  Salt,
  SessionKey: Binary;
begin
  Cipher := ValidCipher(TCipher_Rijndael).Create;
  try
    Salt := RandomBinary(16);
    SessionKey :=
      THash_SHA1.KDF2(Password, Salt, Cipher.Context.KeySize, TFormat_COPY);
    Cipher.Init(SessionKey);
    SetLength(Result, Length(Value));
    Cipher.Encode(Value[1], Result[1], Length(Value) * SizeOf(Value[1]));
    // Result := ValidFormat(TFormat_MIME64).Encode(Salt + Result);
    Result := Salt + Result;
    Cipher.Done;
  finally
    Cipher.Free;
  end;
end;

function AESDecode(const Value: String; const Password: String): String;
var
  Cipher: TDECCipher;
  Salt,
  SessionKey: Binary;
begin
  // Result := ValidFormat(TFormat_MIME64).Decode(Value);
  Result := Value;
  Cipher := ValidCipher(TCipher_Rijndael).Create;
  try
    Salt := Copy(Result, 1, 16);
    SessionKey :=
      THash_SHA1.KDF2(Password, Salt, Cipher.Context.KeySize, TFormat_COPY);
    Cipher.Init(SessionKey);
    Delete(Result, 1, 16);
    Cipher.Decode(Result[1], Result[1], Length(Result) * SizeOf(Result[1]));
    Cipher.Done;
  finally
    Cipher.Free;
  end;
end;
Kommentiere ich jeweils die MIMI64 Zeilen wieder ein, kommt nur noch Murks raus.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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 15:18 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