AGB  ·  Datenschutz  ·  Impressum  







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

Dateien verschlüsseln - aber wie?

Ein Thema von daniel-volk · begonnen am 27. Sep 2003 · letzter Beitrag vom 14. Mär 2004
Antwort Antwort
Seite 2 von 11     12 34     Letzte »    
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#11

Re: Dateien verschlüsseln - aber wie?

  Alt 28. Sep 2003, 14:03
Torry naja, nutze ich weniger.
Besser organisiert ist Delphi Super Page oder VCLComponents. Dort ist es ziemlich einfach und offensichtlich was zu finden. Beide enthalten eine Kategorie "Kryptographie und Komprimierungen". Dort wird man auch DEC finden. Übrigens es heist zwar "DEC" = "Delphi Encryption Compendium" aber viele veröffentlichen es einfach als Cipher.zip. Alternativ besteht bei beiden Seiten die Möglichkeit über die Top Ten Download Listen aller Delphi Komponenten zu gehen. Auch dort sollte man DEC ziemlich schnell finden.
Ich sehe also nicht unbedingt die Notwendigkeit jetzt eine rießige eigene WEB Page zu basteln.
1.) kostet es mich Zeit
2.) finde ich nur Sites gut deren Inhalt immer aktuell gehalten wird, und das kann ich momentan nicht
3.) ist DEC selber eine private Entwicklung in meinem Hobby, also noch nicht mal eine Freeware für andere extra entwickelt, sondern einfach mein privates Ding das ich anderen zur Verfügung stelle, mehr nicht.
4.) ist DEC kein Allheilmittel und Just in Time Package, um sich nicht mit Kryptographie beschäftigen zu müssen. Eher das Gegenteil, einer der es nutzen will muß unbedingt sich in Kryptographie auskennen, es dient dann nur als Zeitersparnis. Denn es enthält gute Implemetierung der bekannten Verfahren die auch getestet sind.
5.) eine Verallgemeinerung in der Kryptographie durch unüberlegtes und nicht Wissensbasierte Anwendung von DEC widerspricht der Kryptographie selber. D.h. DEC ist keine Garantie das durch dessen Benutzung auch sichere Systeme entstehen. Das Gegenteil ist der Fall. Einer der nicht weis was er tut wird mit DEC eher noch unsichere Systeme bauen, denn er meint durch DEC wäre es sicher obwohl seine falsche Anwendung vom DEC es erst recht unsicher macht.
Dies ist der Hauptgrund warum ich immer wehement versuche für DEC keine fertigen Lösungen zu veröffentlichen oder eben WEB Seiten darüber zu schreiben. Es kann nämlich keine vorgefertigten und maßgeschneiderten kryptographische Systeme geben.


Gruß Hagen
  Mit Zitat antworten Zitat
daniel-volk

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

Re: Dateien verschlüsseln - aber wie?

  Alt 28. Sep 2003, 14:55
So,

das DEC hab ich gefunden, aber ich kriege es nicht installiert.
Ich gehe wie üblich auf Komponente installieren und wähle die Datei DECReg.pas oder so.
Beim Kompilieren sucht er dann aber die Komponente DsgnInf.dcu ! Was ist das und wieso finde ich das nicht?

Kann mir da jemand helfen?

Danke!!!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#13

Re: Dateien verschlüsseln - aber wie?

  Alt 28. Sep 2003, 15:04
Weil du Delphi 6 oder 7 hast. Borland hat die benötigten Units einfach umbenannt von D3,D4,D5 zum D6,D7.

Unit DECReg.pas öffnen und dort in der Uses Klausel
"DsgnIntf" durch "DesignIntf, DesignEditors" ersetzen.

Unit DECUtil.pas in der initialization Sektion
InitTestIsOk := CRC32($29524828, GetTestVector, 32) = $9B497502;

Das wars, und DEC läuft auch in D6/D7.

Beide Änderungen sind nötig weil Borland Units umbenannt hat bzw. weil der integrierte Assembler geändert wurde.

Achso noch eines: die unit DECReg.pas MUSS unbedingt in ein DesignTime only Package eingebunden werden. Wird DECReg.pas als neue Komponente installiert so landet es meistens in das "Borland Benutzer Package", dies wäre ok.
Ansonsten bekommt man den allseits bekannten Fehler das Unit "Proxies.dcu" nicht neu kompiliert werden kann weil unit "Proxies.pas" nicht gefunden wurde. Auch dies ist eine Änderung die Bolrand zu verantworten hat.

Gruß Hagen

PS: die im WEB veröffentlichen DEC Sourcen wurden noch entwickelt als es kein Delphi 6 oder 7 gab.
Abgesehen davon sind also DEC's Sourcen absolut kompatibel programmiert wurden.
  Mit Zitat antworten Zitat
daniel-volk

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

Re: Dateien verschlüsseln - aber wie?

  Alt 28. Sep 2003, 17:15
OK, ich denke ich hab das jetzt geschafft. Die Verwendung des HashManagers ist ja auch recht einfach. Ich denke ich muss auch beim Verschlüsseln immer den Key an den Hashmanager weiterleiten, richtig?
Aber wie wähle ich dann den Verschlüsselungsalgorithmus? Ich kann einfach keinen außer Blowfish wählen!?

Ansonsten würde ich mich freuen, wenn jemand von euch mir noch eine kleine Einleitung in die Verwendung der Komponenten geben könnte.

Thx!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#15

Re: Dateien verschlüsseln - aber wie?

  Alt 28. Sep 2003, 18:33
Als ersten Tipp von mir: "verzichte auf ThashManager und TCipherManager", beide sind eigentlich nur im DEC damit es überhaupt sichtbare Komponenten für die "Drag&Design" Programmierer gibt. Viel einfacher ist die direkte Anwendung der DEC Klassen.

Delphi-Quellcode:
function HashFromPassword(const Password: String): String;
begin
  Result := THash_SHA1.CalcString(Password, fmtMIME64);
end;
Erzeugt einen SHA1 Digest von Password und konvertiert diesen binären Digest sofort in das Internt MIME Base 64 Format, damit es "lesbar" wird.

Delphi-Quellcode:
function EncryptString(const Value, Password): String;
begin
  with TCipher_Blowfish.Create(Password, nil) do
  try
    Result := EncodeString(Value, fmtMIME64);
  finally
    Free;
  end;
end;
Verschlüsselt den String in Value mit Blowfish/Password. Das Resulat ist der verschlüsselte Wert der sofort wieder in das lesbare MIME64 Format konvertiert wird. Wichtig dabei ist es zu berücksichtigen das das Passwort im Blowfish nicht direkt benutzt wird. Es wird intern in ein Sessionkey umgewandelt Dazu wird mit einer Hash-Funktion Password in den Sessionkey umgewandelt.

Gruß Hagen
  Mit Zitat antworten Zitat
daniel-volk

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

Re: Dateien verschlüsseln - aber wie?

  Alt 29. Sep 2003, 16:10
OK, danke. Ich teste das mal.
  Mit Zitat antworten Zitat
daniel-volk

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

Re: Dateien verschlüsseln - aber wie?

  Alt 29. Sep 2003, 16:49
Sorry, aber ich bin (glaub ich) echt zu doof.
Ich selbst hab auch lieber so graphische Komponenten, weil ich dann wesentlich einfacher auf alle Funktionen zugreifen kann.
Eine einfache Verschlüsselung mit einem einfachen Kennwort hab ich auch geschafft,
Delphi-Quellcode:
CipherManager1.InitKey(Edit1.Text,0);
  Memo2.Text := CipherManager1.EncodeString(Memo1.Text);
aber das ist ja nun nicht Sinn der Sache, dass ich nur mit einem Algorithmus arbeite. Wie ändere ich das so, dass ich mit Rijndael verschlüsseln kann? Und was muss ich z.B. machen, damit alles im MIME64 Format ausgegeben wird?
Dabei möchte ich aber gerne die graphische Benutzung beibehalten, da ich mit reinem Code zu wenig Erfahrung habe.

Oder kennt jemand vielleicht ein Tutorial für die Verwendung des DEC? Das wäre super!

THX,
Daniel.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#18

Re: Dateien verschlüsseln - aber wie?

  Alt 29. Sep 2003, 18:09
Hi Daniel,

Willst du DEC echt sicher verwenden musst du auch mit Objecten umgehen und programmieren können.
Du bist also nicht zu doof sondern lässt dir von mir nichts sagen. Verwende NICHT diese Komponenten, sondern erlerne wie man die DEC Klassen direkt benutzen kann. Nichts anderes machen diese Komponenten, nur mit dem Unterschied das sie viel zu unfelxibel und auch unsicher sind.

Erstmal: es ist KEIN Sicherheitsrisiko sich von vornherein nur auf einen Cipher und einen Hash Algorithmus zu beschränken. Im Gegenteil, es ist sogar eine zusätzliche Sicherheit und es kann dir im besten Falle 400Kbyte an Code in deiner EXE einsparen. Bedenke, im DEC sind 40 Cipher und 25 Hash Algorithmen implementiert. ALLE diese Klassen werden in die EXE eingelinkt wenn mit den Manager-Komponenten gearbeitet wird !
Das einzigst WICHTIGE ist das wenn der von dir ausgewählte Algorithmus in Zukunft gebrochen wird, und somit unsicher wird, das dein Code mit minimalsten Änderungen auf einen anderen und sicheren Algorithmus ausweichen kann. Dazu ist DEC prädistiniert.

Nun, du willst kurze Strings verschlüsseln und dazu Hashbasierte Passwörter benutzen. Dabei willst du sicherstellen das du später sehr schnell den Algo. wechseln kannst.

Delphi-Quellcode:
const
  DefCipherClass: TCipherClass = TCipher_Blowfish;
  DefHashClass: THashClass = THash_SHA1;
  DefStringFormat: Integer = fmtMIME64;

function RandomString(Len: Integer): String;
// erzeugt Zufallsstring
begin
  SetLength(Result, Len);
  RndSeedBuffer(Result[1], Len);
end;
  
function Encode(const Value, Password: String): String; overload;
// verschlüsselt String in Value mit Password
// dabei wird der PlainText zusätzlich mit Zufallsdaten am Anfang expandiert
// um bestimmte Angriffe zu verhindern
var
  Data: String;
begin
  with DefCipherClass.Create('', nil) do
  try
    Mode := cmCFB;
    HashClass := DefHashClass;
    InitKey(Password, nil);
    Data := RandomString(BufSize) + Value;
    Result := EncodeString(Data, DefStringFormat);
  finally
    Free;
    ProtectString(Data); // Speicher von Data wird überschrieben
  end;
end;

function Decode(const Value, Password: String): String; overload;
begin
  with DefCipherClass.Create('', nil) do
  try
    Mode := cmCFB;
    HashClass := DefHashClass;
    InitKey(Password, nil);
    Result := DecodeString(Value, DefStringFormat);
    Delete(Result, 1, BufSize); // lösche BufSize Bytes Zufallsstring
  finally
    Free;
  end;
end;

begin
// nun alle in der EXE möglichen Algos. registrieren, falls man mehrere dynamisch benutzen will
  RegisterDECClasses([TCipher_Blowfish, TCipher_IDEA, THash_MD5, THash_SHA1]);
// nun unsere globalen Klassentypen setzen
  DefCipherClass := DECClassByName('Blowfish', TCipher) as TCipher;
  DefHashClass := DECClassByName('MD5', THash) as THash;
// oder eben
  DefCipherClass := DECClassByName('IDEA', TCipher) as TCipher;
  DefHashClass := DECClassByName('SHA1', THash) as THash;
// oder hardcoded
  DefCipherClass := TCipher_Rijndael;
  DefHashClass := THash_RipeMD256;
end;
Wie du oben siehst geht alles sehr einfach ohne die Manager Komponenten, und wenn die Unit DECClasses.pas NICHT verwendet wird, würden im obigen Beispiel auch nur die Algorithmen Blowfish,IDEA,Rijndael,MD5,SHA1 und RipeMD256 in die EXE eingelinkt.

Noch einiges zu den Funktionen "Encode" und "Decode".
1.) sie erzeugen die nötigen Hashobjectes und Cipherobjecte selber, initialisieren sie mit dem Passwort, verschlüsseln die Daten und zerstören sofort dabach diese Objecte. D.h. deren Lebenszeit ist die kürzt mögliche Lebenszeit überhaupt. Die Managerkomponenten arbeiten im Gegensatz dazu, und würdem somit Spyprogrammen die die Speicherbereiche deiner Anwendungen ausspionieren viel Freiraum geben um das Passwort des Benutzer's zu finden.
JEDE Komponentenbasierte Verschlüsselung hat das Problem das deren Lebenszeit viel zu lange dauert. Somit kann man während dieser Lebenszeit mit einer Spysoftware deren Speicherbereiche analysieren um somit an das Passwort zu kommen. Grundsätzlich sollte die Lebenszeit kryptographischer Objecte also so kurz wie möglich gehalten werden. Dies geht aber nur wenn man diese Objecte erst wenn man sie benötigt erzeugt, dann benutzt und sofort wieder zerstört.
2.) ich benutze den CipherMode cmCFB. Dieser ist zwar lansgammer als andere Ciphermodes, dafür ist er aber ein vielfaches sicherer mit sehr kurzen Nachrichten.
3.) die eigentliche Nachricht wird am Anfang mit Zufallsbytes vergrößert. D.h. Encode() verschlüsselt als erstes mal paar Bytes Zufallsdaten und erst dann die eigentliche Nachricht. Dies ist enorm wichtig damit man z.B. keine "known Cipher Text" Attacks machen kann.


Gruß Hagen
  Mit Zitat antworten Zitat
daniel-volk

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

Re: Dateien verschlüsseln - aber wie?

  Alt 30. Sep 2003, 17:17
OK,

ich will mal auf die hören und es codegesteuert machen.
Dann muss ich doch in die Project-uses
Delphi-Quellcode:
Cippher in '..\Source\Cipher.pas',
DECUtil in '..\Source\DECUtil.pas',
Hash in '..\Source\Hash.pas'
einfügen.
Zudem bekommt jede Unit noch die uses:
DECUtil, Cipher, Hash In deinem Demo hab ich mir die String-Verschlüsselung angeguckt. Das ist ja alles sehr plausibel, aber wie wähle ich bitte die Algorithmen für Hash und Cipher?
Ich krieg das einfach nicht hin. Ganz egal, ob ich nun mit dem Cipher-Manager oder ohne ihn arbeite.



Für Tipps wäre ich sehr dankbar.

An Alle, die schon einmal das DEC verwendet haben:
Ich weiß ja nicht wie ihr das macht, aber immer dann, wenn ich mit neuen Komponenten arbeite, baue ich mir ein ganz simples Prog, das die wichtigsten Funktionen der Komponente nutzt. Das lege ich mir dann zum späteren Nachschlagen auf der Festplatte ab.
Falls jemand sowas hat, das zudem nicht nur aus Projekt-Quellcode sondern hauptsächlich aus einer Unit besteht, wäre ich ihm/ihr sehr dankbar, wenn ich mir dieses einmal ansehen dürfte. Ich denke ich könnte darin vielleicht noch gezielter die Funktionen nachlesen.

Es geht nicht darum, dass ich überhaupt was verschlüsseln will (Strings und Dateien zu verschlüsseln ist kein Problem), sondern darum, dass ich nicht weiß, wie ich den Algorithmus auf Rijndael ändern kann, den Hashmode auf MD256 (was nutzt man hier eigentlich üblicherweise mit Rijndael?) und wie ich die Ausgabe auf MIME64 stelle (nur beim Ver- / Entschlüsseln von Strings).

Danke im Voraus,
Daniel.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#20

Re: Dateien verschlüsseln - aber wie?

  Alt 30. Sep 2003, 18:38
Hi Daniel,

In den vorherigen Postings habe ich eigentlich schon alles gezeigt was du benötigst. Angefangen damit wie man bei einer Verschlüsselung den Hash Algortihmus oder den Ciphermode einstellen kann, über die Verwendung dynamischer Klassen und deren Registration im DEC System um sie später per Name wieder zu lesen und zu benutzen. Dieser Thread zeigt sehr schön warum ich meine das ein Tutorial oder explizietere Dokumentation wenig hilfreich für die Anwender vom DEC ist. Man würde dadurch nur wie ein Pappagei diese Tutorials nachempfinden ohne sich jemals intensiv und tiefgreifender mit der Kryptographie und ihrer Anwendung beschäftigt zu haben.

Ok, trotzdem werde ich mal hier vesuchen dich tiefer einzuarbeiten.

Zitat:
Es geht nicht darum, dass ich überhaupt was verschlüsseln will (Strings und Dateien zu verschlüsseln ist kein Problem), sondern darum, dass ich nicht weiß, wie ich den Algorithmus auf Rijndael ändern kann, den Hashmode auf MD256 (was nutzt man hier eigentlich üblicherweise mit Rijndael?)
Geschmackssache:
SHA1 ist der am weitesten annerkannte Algorithmus und wird als sicher eingestuft.
MD4,MD5 sind sehr schnell aber in MD5 hat man kleinere Schwächen endteckt. Somit würde ich MD4/MD5 empfehlen um Indexe/Prüfsummen o.ä. aufzubauen, aber nicht um sicherheitsrelevante Passwörter o.ä. zu schützen.
RipeMD empfinde ich prsönlich als die beste Wahl, er ist sicher und analysiert wurden. Er ist in Europa ein Standardverfahren und für mich persönlich ist es wichtig das er eben NICHT amerikanisch ist. SHA1 z.B. wurde vom NIST und NSA abgesegnet.
Haval habe ich schon in einigen Anwendungen gesehen, er wird also benutzt und ist sicher. Der Vorteil von Haval ist das dessen Digestlänge sehr variabel ist. Das gleiche gilt für RipeMD.
Tiger ist ein sehr guter 64Bit Hash, also z.B. auf Itaniums sehr schnell. Allerdings ist er wie die nachfolgenden Hash's wenig bis garnicht analysiert. Denoch sind es Hash Algortihmen die durch Profis entwickelt wurden.
Square und Sapphiere sind Hash-Algos die auf Grund deren Entwicklungen ihrer gleichnamigen Verschlüsselungsalgos. entstanden sind. Da ich immer die Meinung vertrete das ein Hash Algo NICHT ein Cipher bzw. ein Cipher NICHT ein Hash sein sollte, würde ich diese nicht anwenden. Denoch gelten die Cipher Square/Sapphiere als gute Cipher und somit sind deren Hash-Pendants ebenfalls gut. Auf Sapphiere liegen Patente.
Snefru ist ein Ausnahme-Hash. Sollten irgendwan einmal ganz bestimmte Mathematischen Grundlagen gebrochen werden so würde ein ganze Latte von Hash/Cipher Algortihmen unsicher werden. In Punkto Hash wären das alle oben genannten, bis auf SHA1 und Snefru. Denn beide Verfahren haben wesentliche Unterschiede zu den anderen Verfahren.

Im Bereich der Cipher wird eine gute Analyse schwieriger für mich, da 1. im DEC 40 verschiedene Cipher sind und 2. diese sich untereinander stark unterscheiden.
Nungut, aös erste DES und seine Derivate 2DES, 3DES usw. DES ist ein Standard und will man auf andere Sorftwaredaten zugreifen die diesen Standard benutzen so muß man DES verwenden. Allerdings DES ist enorm alt (was ihn nicht unsicher sondern sicherer macht da er bis heute nicht offiziell gebrochen wurde) und deshalb würde ich ihn in neuen Projekten niemals verwenden. Besonders Single DES ist als unsicher einzustufen da dessen Schlüsslelänge nur 56 Bit beträgt.

Rijndael, Twofish, Blowfish und IDEA wären die Favoriten. Wobei Rijndael natürlich der AES Gewinner ist. Ob die politisch gesehen Gut oder Schlecht ist darüber lässt sich streiten. Man muß bedenken das das NIST unter Absegnung vom NSA Rijndael hauptsächlich ausgewählt hat weil das Verfahren über ein breite Palette von verschiedner Hardware scallierbar ist. Dies bedeutet z.B. das Rijndael auch enorm leicht in FPGA Hardware umzusetzen ist, diese FPGA aber genau das Instrument der mächtigen Organisationen sein wird um Brute Force Angriffe auf Rijndael Schlüssel durchzuführen.
IDEA gilt als Ausnahmecipher und als sicher ist aber duch Patente blockiert.
Twofish ist die Weiterentwicklung von Blowfish und beide wurden von Bruce Schneier entwickelt. Es fragt sich warum Schneier Blowfish weiterentwickeln musste zum Twofish. Beide sind sicher. Blowfish ist frei verwendbar.
TEA,RC4 und SCOP sind Streamcipher. Dadurch haben sie besondere Eigenschaften. RC4 ist ein anerkanntes Verfahren wogegen SCOP/TEA eher Undergrund Cipher sind. Beide wurden nicht expensiv analysiert. Denoch benutze ich gerade SCOP um enorm schnell große Datenmengen zu verschlüsseln, da SCOP eben eine der schnellsten Verschlüsselungen auf PC's ist. Natürlich muß man dann Abstriche in der Sicherheit machen.

Nicht unerwähnt soll bleiben das ich im DEC auch eine Eigenentwicklung eingebaut habe. Sie heist PMC=Polymoph Cipher. Bei diesem Verfahren gibt es keinen festen Verschlüsselungsalgorithmus mehr, sondern das Passwort und die Messages bestimmen wir der Cipher intern verschlüsselt. D.h. der PMC ist ein Verfahren das abhängig vom Passwort und der Messages erst zur Verschlüsselungszeit den Verschlüsselungsalgorithmus compiliert. Der PMC kann nicht auf FPGA Hardware implementiert werden, da er z.B. bei der Verschlüsselung von 1Kb Daten temporär ca. 10Mb an Verschlüsselungscode erzeugt.

Zitat:
und wie ich die Ausgabe auf MIME64 stelle (nur beim Ver- / Entschlüsseln von Strings).
Auch dieses habe ich in den vorherigen Postings gezeigt. Der letzte Parameter von TCipher.Encode-/DecodeString() gibt das Format an. Ich habe auf deine Wünsche hin mit fmtMIME64 gearbeitetm was exakt dem MIME Base 64 Verfahren entspricht. Um diese Sache dynamisch zu machen wurde eine Globale Variable DefStringFormat: Integer = fmtmIME64 benutzt.


Willst du in deiner Awendung nun z.B. mit Blwofish,SCOP,Rijndael,MD4,SHA1,RipeMD arbeiten so müssen die Unit Hash,Cipher,DECUtils eingebunden werden. DEC enthält nun alles ws nötig ist um mit dynamischen Klassen zu arbeiten, also so ähnlich wie die VCL es tut mit RegisterClass() und getClass().

Zur Intialisierungsphase der Anwendung müssen also dem DEC alle verwendbaren Algos. mitgeteilt werden.


Delphi-Quellcode:
uses Hash,Cipher,DECUtils;

initialization
  RegisterDECClasses([TCipher_Blowfish, TCipher_SCOP, TCipher_Rijndael, THash_MD4, THash_SHA1, THash_RipeMD128, .....]);
end.
Nun findest du in DECUtils.pas alle wichtigen Funktionen um auf diese registrierten Klassen zuzugreifen. Zb.

Delphi-Quellcode:
var
  Cipher: TCipherClass;
  Hash: THashClass;
begin
  Cipher := DECClassByName('SCOP', TCipher) as TCipher;
  with Cipher.Create() do ......

// oder
  Hash := DECClassByName('MD4', THash) as THash;
  Hash.CalcString('Test', nil, fmtMIME64);
end;
Das heist alle registrierten Klassen können durch ihren Klassennamen, z.B. "THash_MD4" oder deren Kurzname = "MD5", also dem Namen nach dem Unterstrich "_" über DECClassByName gefunden werden.

Zusätzlich zu dieser Methode implementiert DEC noch eine sogenante Identity. Dies ist ein 32 Bit Wert der eindeutig einen Algortihmus beschreibt. Würde man z.B. mit solchen durch den User auswählbaren Algos. arbeiten und eine Datei verschlüsseln, muß das Programm ja wissen welches Verfahren benutzt wurde. Nun dazu speichert man einfach Cipher.Identity in den Header der Datei. Mit

Delphi-Quellcode:
var
  Cipher: TCipherClass;
  Hash: THashClass;
  CipherIdentity: Cardinal;
  HashIdentity: Cardinal;
begin
// lade header aus verschlüsseltem Stream
  Stream.Read(CipherIdentity, SizeOf(CipherIdentity));
  Stream.Read(HashIdentity, SizeOf(HashIdentity));
  Cipher := DECClassByIdentiy(CipherIdentity, TCipher) as TCipher;
  Hash := DECClassByIdentity(HashIdentity, THash) as THash;
  
  with Cipher.Create('', nil) do
  try
    Mode := cmCTS;
    HashClass := Hash; // <--- ändere hier den Password-Hash-Algo.
    InitKey(Password, nil);
    DecodeStream(Stream, Dest, Stream.Size - Stream.Position);
  finally
    Free;
  end;
   
end;
wird dies demonstriert. Dies Identites können sehr einfach für jede Anwendung separat angepasst werden, sprich serialisiert werden. Einfach IdentityBase in DECUtils.pas ändern.

Oben wurde auch gezeigt wie du den Hash-Algortihmus der das Password in den Sessionkey umwandelt geändert werden kann. Dieses Verhalten habe ich auch schon in den letzten Posting gezeigt.

Schau dir bitte die DECUtils.pas genauer an, dort findest du neben DECRegisterClasses() usw. andere wichtige Funktionen.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 11     12 34     Letzte »    


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 07:52 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