Ja geht, allerdings auf Umwegen
1.) Datestream öffnen
2.) einen TMemoryStream erzeugen und die Bytes aus dem Dateistream lesen
3.) .Init(MemoryStream.Memory^, MemoryStream.Size); aufrufen
Aber Vorsicht! Diese Methode muß sehr genau überlegt sein. Besser ist es mit zb. THash_SHA1.CalcFile(KeyFileName, TFormat_Copy) erstmal nur einen digitalen Fingerabdruck der Schlüsseldatei zu erzeugen. Dieser 160 Bit Wert wird dann mit Hilfe einer KDF und einem Zufallssalt in einen Sessionkey umgewandelt. Benutzt du direkt den Inhalt einer beliebigen Datei als Passwort so ist die Wahrcheinlichkeit sehr hoch das du schlechte Schlüssel erzeugst. Denn viele Dateien enthalten zb. große Datenbereiche die zb. nur aus Nullen bestehen, deren Inhalte auf Grund von Headern quasi bekannt sind und somit erraten werden können. Die Entropie solcher Dateien muß also komprimiert werden, am besten mit einer Hash Funktion. Es sei denn diese Schlüsseldatei wurde mit echten Zufall befüllt. Nur ist dann der Sinn das der Anwender sich eine beliebige Datei auf seinem Rechner als Schlüsseldatei auswählt, und so nur deren Location merken muß, fraglich.
Also besser wäre es wenn du obige Funktionen von mir so aufrufen würdest:
Encrypt(bla,bla, THash_SHA256.CalcFile(KeyFileName, TFormat_Copy));
Gruß Hagen