AGB  ·  Datenschutz  ·  Impressum  







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

DECUtil alt auf DECUtil 5.2

Ein Thema von tsteinmaurer · begonnen am 3. Jan 2012 · letzter Beitrag vom 12. Jan 2012
Antwort Antwort
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#1

DECUtil alt auf DECUtil 5.2

  Alt 3. Jan 2012, 21:00
Hallo,

ich steh hier irgendwie auf dem Schlauch.

Ich hab einen D2006 Legacy Code, der eine ältere DECUtil Version verwendet. Dieser Legacy-Code zum Entschlüsseln eines Passworts soll nach D2010 portiert werden. Da ich die alte DECUtil Version unter D2010 nicht compiliert bekomme, versuche ich DECUtil 5.2 einzusetzen. Im Wesentlichen kommt beim Encode nicht mehr das Richtige raus, d.h. das entschlüsselte Passwort, das ich für eine Datenbankverbindung benötige, stimmt nicht mehr.

Alter Code mit älterer DecUtil Version:
Delphi-Quellcode:
function Decrypt(APassword: String): String;
begin
  with TCipher_Blowfish.Create(KEYSTR, nil) do begin
    try
      Mode := TCipherMode(0);
      Result := CodeString(APassword, paDecode, fmtDefault);
    finally
      Free;
    end;
  end;
end;
Versuch der Entschlüsselung mit DECUtil 5.2 wie folgt:
Delphi-Quellcode:
const
  C_KEYSTR: AnsiString = 'xyz';
  CipherMode: TCipherMode = cmCTSx;
  TextFormat: TDECFormatClass = TFormat_MIME64;

procedure TForm1.Button1Click(Sender: TObject);
var
  b: Byte;
begin
  with TCipher_Blowfish.Create do
  begin
    try
      Mode := CipherMode;
      Init(C_KEYSTR, SizeOf(C_KEYSTR), b, 0);
      ShowMessage(DecodeBinary(Edit1.Text, TextFormat));
    finally
      Free;
    end;
  end;
end;
Im zweiten Beispiel steht in Edit1.Text das verschlüsselte Passwort drinnen. Der Wert für KEYSTR und C_KEYSTR ist identisch.

Hat da jemand eine Idee? Danke!
  Mit Zitat antworten Zitat
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: DECUtil alt auf DECUtil 5.2

  Alt 4. Jan 2012, 13:04
Kann das ein Problem sein, daß das Password ein String ist (nun Unicode, vorher Ansi)? Was passiert denn, wenn Du es zuvor auf RawByteString konvertierst? Dann stimmt zumindest die Anzahl der Bytes.

Grüße,
Ulrich
  Mit Zitat antworten Zitat
pko

Registriert seit: 4. Sep 2008
Ort: Niederrhein
5 Beiträge
 
Delphi XE2 Enterprise
 
#3

AW: DECUtil alt auf DECUtil 5.2

  Alt 5. Jan 2012, 19:19
schau mal

var
ACipherClass: TDECCipherClass = TCipher_Blowfish; //TCipher_1DES;//TCipher_Rijndael;
ACipherMode: TCipherMode = cmCTSx;
AHashClass: TDECHashClass = THash_Whirlpool;
(** oder *******
THash_MD2
THash_MD4
THash_MD5
THash_RipeMD128
THash_RipeMD160
THash_RipeMD256
THash_RipeMD320
THash_SHA
THash_SHA1
THash_SHA256
THash_SHA384
THash_SHA512
THash_Haval128
THash_Haval160
THash_Haval192
THash_Haval224
THash_Haval256
THash_Tiger
THash_Panama
THash_Whirlpool
THash_Whirlpool1
THash_Square
THash_Snefru128
THash_Snefru256
THash_Sapphire
*********)
ATextFormat: TDECFormatClass = TFormat_HEX; //TFormat_Mime64;
AKDFIndex: LongWord = 1;



function TRegisterClass.EncodeCipher( Input, Key: String ): String;
var
ASalt: Binary;
AData: Binary;
APass: Binary;
begin
with ValidCipher(ACipherClass).Create, Context do
try
ASalt := RandomBinary(16);
APass := ValidHash(AHashClass).KDFx(Key[1], Length(Key) * SizeOf(Key[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
Mode := ACipherMode;
Init(APass);
SetLength(AData, Length(Input) * SizeOf(Input[1]));
Encode(Input[1], AData[1], Length(AData));
Result := ValidFormat(ATextFormat).Encode(ASalt + AData + CalcMAC);
finally
Free;
ProtectBinary(ASalt);
ProtectBinary(AData);
ProtectBinary(APass);
end;
ShowMessage('EncodeCipher: '+result);
end;

function TRegisterClass.DecodeCipher( Input, Key: String ): String;
var
ASalt: Binary;
AData: Binary;
ACheck: Binary;
APass: Binary;
ALen: Integer;
begin
with ValidCipher(ACipherClass).Create, Context do
try
ASalt := ValidFormat(ATextFormat).Decode(Input);
ALen := Length(ASalt) - 16 - BufferSize;
AData := System.Copy(ASalt, 17, ALen);
ACheck := System.Copy(ASalt, ALen + 17, BufferSize);
SetLength(ASalt, 16);
APass := ValidHash(AHashClass).KDFx(Key[1], Length(Key) * SizeOf(Key[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
Mode := ACipherMode;
Init(APass);
SetLength(Result, ALen div SizeOf(Input[1]));
Decode(AData[1], Result[1], ALen);
if ACheck <> CalcMAC then
raise Exception.Create('Invalid data');
finally
Free;
ProtectBinary(ASalt);
ProtectBinary(AData);
ProtectBinary(ACheck);
ProtectBinary(APass);
end;
ShowMessage('DecodeCipher: '+result);
end;
Klaus
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#4

AW: DECUtil alt auf DECUtil 5.2

  Alt 12. Jan 2012, 12:13
Danke für die Rückmeldungen. Bzgl. dem Unicode-Aspekt hatte ich ein paar Dinge ausprobiert, aber nicht wirklich auf einen grünen Zweig gekommen.

@Klaus: Danke für das Beispiel. Ist das einfach eine Umsetzung decodieren und encodieren oder ist dein Encodiern mit meinem decodierten String dahingehend kompatibel, dass dein Code für DECUtil 5.2 quasi der Ersatz für meine Umsetzung in der älteren DEC-Version ist?

Danke und lg.
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#5

AW: DECUtil alt auf DECUtil 5.2

  Alt 12. Jan 2012, 12:56
Hallo Thomas,

ich habe leider im Moment wenig Zeit, aber schau mal hier:
http://www.delphipraxis.net/124314-u...auf-5-2-a.html

Viele Grüße
Assertor
Frederik
  Mit Zitat antworten Zitat
pko

Registriert seit: 4. Sep 2008
Ort: Niederrhein
5 Beiträge
 
Delphi XE2 Enterprise
 
#6

AW: DECUtil alt auf DECUtil 5.2

  Alt 12. Jan 2012, 15:12
such doch mal oben nach DECUtil 5.2
Klaus
  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 04:47 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