Einzelnen Beitrag anzeigen

daniel-volk

Registriert seit: 16. Jul 2003
170 Beiträge
 
Delphi 6 Enterprise
 
#61

Re: Dateien verschlüsseln - aber wie?

  Alt 5. Okt 2003, 13:56
So,
ich hab hier mal die erste Beta meines Verschlüsselungsprogs CryptMaster.
Bis jetzt kann man nur Texte ver- und entschlüsseln, dafür aber - hoffentlich - sehr sicher!
Ich arbeite mit folgenden Mitteln:
DEC von Hagen (öffentliche Version)
Cipher: Rijndael
Hash: SHA1
Mode: CTS

Bevor der Klartext verschlüsselt wird, wird erst noch ein Zufallsstring der Länge "BufSize" vorne angehängt.
Anschließend wird beides verschlüsselt.
Nachdem alles verschlüsselt ist, wird noch der Original-Hashwert des Klartextes vorne angehängt und fertig.

Die Entschlüsselung geht genau umgekehrt.

Testet also bitte alle mal den CryptMaster und sagt mir, wie ihr das GUI etc findet!

@Hagen:
So, nun mal an den Experten:
Mein vorläufig verwendeter Code sieht so aus. Meiner Meinung nach sollte das zu einer maximalen Sicherheit führen, aber ich bin eben nur Amateur in Sachen Verschlüsselung.

Delphi-Quellcode:
const
  EXTENSION = '.cryptmaster';
  APPNAME = 'CryptMaster';
  APPVER = 'Beta 1';
  DefCipherClass : TCipherClass = TCipher_Rijndael;
  DefHashClass : THashClass = THash_SHA1;
  DefStringFormat = fmtMIME64;
  DefCipherMode = cmCTS;

implementation

{$R *.dfm}

// Function zum Generieren der Zufallswerte
function TFrmCipher.RandomString(Len: Integer): String;
begin
  SetLength(Result, Len);
  Rnd.Buffer(Result[1], Len);
end;

// function zum Verschlüsseln von Text
function TFrmCipher.EncodeString(Klartext, Passwort : string) : string;
var
  Hashstring : string;
begin
  with DefHashClass.Create(nil)
  do begin
      try
       HashString := CalcString(Klartext,nil,DefStringFormat);
      finally
       Free;
      end;
     end;
  with DefCipherClass.Create('',nil)
  do begin
      try
       Mode := DefCipherMode;
       HashClass := DefHashClass;
       InitKey(Passwort,nil);
       Result := CodeString(RandomString(BufSize)+Klartext,paEncode,DefStringFormat);
       Result := HashString+Result;
      finally
       Free;
      end;
     end;
end;

// String dekodieren | Result[1] (0,1) gibt an, ob es einen Fehler gab
function TFrmCipher.DecodeString(Ciphertext,Passwort : string):string;
var
  Hashlength : word;
  OldHash, NewHash : string;
begin
  with DefHashClass.Create(nil)
  do begin
       try
         Hashlength := length(CalcString(Ciphertext,nil,DefStringFormat));
       finally
         Free;
       end;
     end;
  OldHash := Copy(Ciphertext,1,Hashlength);
  Delete(Ciphertext,1,Hashlength);
  with DefCipherClass.Create('',nil)
  do begin
      try
       Mode := DefCipherMode;
       HashClass := DefHashClass;
       InitKey(Passwort,nil);
       Result := CodeString(Ciphertext,paDecode,DefStringFormat);
       Delete(Result,1,BufSize);
      finally
       Free;
      end;
     end;
  with DefHashClass.Create(nil)
  do begin
       try
         NewHash := CalcString(Result,nil,DefStringFormat);
       finally
         Free;
       end;
     end;
  If OldHash = NewHash
  then Result := '1'+Result
  else Result := '0'+Result;
end;
Wie bewertest du diesen Code?

Thx,
Daniel.

PS: @Hagen:
Würde es dir etwas ausmachen, wenn ich dir meinen fertigen Sourcecode (sofern er denn mal irgendwann fertig ist) demnächst zur Kontrolle zuschicke? Bevor ich das Ding mit der Definition "sehr sicher" - möchte nämlich mit die sicherste Freeware-Verschlüsselungssoftware schreiben - auf die Leute loslasse, hätte ich das schon gerne nochmal überprüft.
Angehängte Dateien
Dateityp: zip cryptmaster_beta1.zip (383,7 KB, 32x aufgerufen)
  Mit Zitat antworten Zitat