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.