AGB  ·  Datenschutz  ·  Impressum  







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

DEC 5 Example in C# konvertieren

Ein Thema von Movementroboter · begonnen am 5. Nov 2014 · letzter Beitrag vom 5. Nov 2014
Antwort Antwort
Movementroboter

Registriert seit: 30. Okt 2014
10 Beiträge
 
#1

DEC 5 Example in C# konvertieren

  Alt 5. Nov 2014, 09:57
Hallo Leute,
kann mir jemand diesen Code in C# Konvertieren ?

Code:

---

uses
  DECUtil, DECCipher, DECHash, DECFmt;
 
...

var
  ACipherClass: TDECCipherClass = TCipher_Rijndael;
  ACipherMode: TCipherMode = cmCBCx;
  AHashClass: TDECHashClass = THash_Whirlpool;
  ATextFormat: TDECFormatClass = TFormat_Mime64;
  AKDFIndex: LongWord = 1;

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

function Encrypt(const AText: WideString; const APassword: WideString): WideString; overload;
var
  ASalt: Binary;
  AData: Binary;
  APass: Binary;
begin
  with ValidCipher(ACipherClass).Create, Context do
  try
    ASalt := RandomBinary(16);
    APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
    Mode := ACipherMode;
    Init(APass);
    SetLength(AData, Length(AText) * SizeOf(AText[1]));
    Encode(AText[1], AData[1], Length(AData));
    Result := ValidFormat(ATextFormat).Encode(ASalt + AData + CalcMAC);
  finally
    Free;
    ProtectBinary(ASalt);
    ProtectBinary(AData);
    ProtectBinary(APass);
  end;
end;

function Decrypt(const AText: String; const APassword: String): String; overload;
var
  ASalt: Binary;
  AData: Binary;
  ACheck: Binary;
  APass: Binary;
  ALen: Integer;
begin
  with ValidCipher(ACipherClass).Create, Context do
  try
    ASalt := ValidFormat(ATextFormat).Decode(AText);
    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(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
    Mode := ACipherMode;
    Init(APass);
    SetLength(Result, ALen div SizeOf(AText[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;
end;

function Decrypt(const AText: WideString; const APassword: WideString): WideString; overload;
var
  ASalt: Binary;
  AData: Binary;
  ACheck: Binary;
  APass: Binary;
  ALen: Integer;
begin
  with ValidCipher(ACipherClass).Create, Context do
  try
    ASalt := ValidFormat(ATextFormat).Decode(AText);
    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(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
    Mode := ACipherMode;
    Init(APass);
    SetLength(Result, ALen div SizeOf(AText[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;
end;

...

procedure TForm1.Button1Click(Sender: TObject);
var
  s, k: WideString;
begin
  s := 'The quick brown fox jumps over the lazy dog';
  k := 'password';
  Memo1.Lines.Clear;
  Memo1.Lines.Add(
    'Encode Test: ' + Encrypt(s, k) + sLineBreak +
    'Decode Test: ' + Decrypt(Encrypt(s, k), k)
  );
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: DEC 5 Example in C# konvertieren

  Alt 5. Nov 2014, 10:05
  • Benutze doch bitte die Delphi-Tags für Delphi-Source
  • Hausaufgaben werden hier nicht erledigt
    (eine Möglichkeit wäre das Unterforum Job-Angebote)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#3

AW: DEC 5 Example in C# konvertieren

  Alt 5. Nov 2014, 12:06
Hallo Leute,
kann mir jemand diesen Code in C# Konvertieren ?
Code:
  DECUtil, DECCipher, DECHash, DECFmt;
Hey. Klar. Liefer mir schnell den übersetzten C# Code für die DEC Units und deren Abhängigkeiten. Dann tippe ich Dir den Rest schnell zusammen....

Oder:
Schau Dir die MSDN Doku von System.Security.Cryptography an.
Dort findest Du diverse symmetrische Verschlüsselungen (unter anderem auch Rijndael) und ein par Codeschnipsel.
  Mit Zitat antworten Zitat
gammatester

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

AW: DEC 5 Example in C# konvertieren

  Alt 5. Nov 2014, 12:11
Auch so wird das problematisch, da eine der berühmt/berüchtigten proprietären DEC-Verschlüsselungsmethoden verwendet wird.
Zitat:
cmCBCx = Cipher Block Chainung, with CFB8 padding of truncated final block
Das müßte dann selbstverständlich in C# nachgebildet werden. Alternativ: verwende Standard-CBC und Dein eigenes Padding auf Blockgrenzen.

Und die restlichen Probleme sind natürlich nicht verschwunden:
  • Welche Schlüsselgröße wird verwendet?
  • Wie wird der Schlüssel aus dem Passwort berechnet? (Auch KDFx ist wieder proprietär: "class function TDECHash.KDFx // DEC's own KDF, even stronger".)
  • ...
Eventuell findest Du weitere Infos/Hinweise hier: http://www.delphipraxis.net/171047-d...uf-delphi.html
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#5

AW: DEC 5 Example in C# konvertieren

  Alt 5. Nov 2014, 13:30
Ist das tatsächlich eine Hausaufgabe von deinem Informatiklehrer?

Sinnfreier geht es nämlich kaum noch. Wie Gammatester schon sagte, KDFx ist eine vom Autor veränderte Variante von KDF2. Dein Leher kann nicht von dir verlangen das in eine andere Sprache wie C# umzusetzen, das übersteigt Fähigkeiten eines normalen Informatikschülers bei weitem.

Warum jetzt auf einmal C#?
Gruß
Cookie
  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 23:15 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