したがって、私の現在のタスクでは、特定のテキスト文字列(例:ABC123)を取得し、LockBox3のEncryptString(source、target)関数を使用して暗号化します。文字列を正常に暗号化し、出力を取得して.txtファイルに保存できます。
このプロセスの次のステップは、LockBox3のEncryptFile(source、target)関数を使用して、すでに暗号化された文字列を含む.txtを取得し、AES-128(文字列の暗号化と同じですがdiffパスワードを使用)を使用してファイルを暗号化することです。
基本的に、文字列を正しく暗号化して.txtファイルに出力することができます。次に、ユーザーに.txtを取得して、プログラムに取り込むように要求します。次に、プログラムはそのファイルを取得してさらに暗号化しようとします。これを行うと、出力するファイルが表示されます。ただし、このファイルを復号化すると、結果の.txtに元のテキストやその他のテキストが含まれなくなります。私は基本的に、.txtファイルを暗号化する方法について混乱しています。助言がありますか?この質問/コードが十分に具体的でない場合は、お詫び申し上げます。私が苦労していることを皆さんがよりよく理解できるようにするために、状況について明確にする必要がある場合は、他に何を教えてください!ありがとう!
編集1:
皆さん、提案してくれてありがとう。明確にするために:
復号化プロセスで使用するストリームは後で使用するため、ファイルを復号化した後、ファイルから読み取り、残りの暗号化された(最初のステップからの)文字列を復号化できます。
さらに明確にするために:
文字列を暗号化するための私のコーデック(Codec1)は、CBCでAES-128を使用しており、タグは「0」、AsymetricKeySizeは1024です(これは、このタイプの暗号化には関係ありませんか?)ファイルを暗号化するための私のコーデック(上記のCodec2)の設定は同じですが、Codec1とCodec2のパスワードは異なります。基本的に、Codec1を使用して文字列を暗号化して.txtに書き込み、次にCodec2を使用して上記のファイルを暗号化します。最終的にそれを復号化し、Streamを使用して上記のファイルから読み取り、Codec1を使用してその文字列を再度復号化します。
私のファイルの暗号化/復号化コード:
文字列暗号化:
procedure TForm1.Button1Click(Sender: TObject);
begin
codec1.Password := WORD_1;
//Begin encryption
sPlainText := Serial_number.Number; //Store Serial Number of machine
codec1.EncryptString(sPlainText,CipherText); //Encrypt (base64)
listbox2.Clear;
listbox2.AddItem(Ciphertext, AnsiCipher);
end;
暗号化された文字列をファイルに書き込み、保存します。
saveDialog := TSaveDialog.Create(self);
saveDialog.Title := 'Choose location to save Authentication Code';
saveDialog.InitialDir := 'C:\';
saveDialog.DefaultExt := '';
saveDialog.FilterIndex := 1;
saveDialog.Execute();
glb_fileName1 := saveDialog.FileName;
//open stream and write cipher to a .txt of chosen location
try
Stream := TFileStream.Create(saveDialog.GetNamePath + saveDialog.FileName + '.txt', fmOpenReadWrite);
except
Stream := TFileStream.Create(saveDialog.GetNamePath + saveDialog.FileName + '.txt', fmCreate);
end;
for k := 1 to (Length(CipherText)) do
buff[k] := byte(CipherText[k]);
ptr := @buff[1];
Stream.WriteBuffer(ptr^, Length(CipherText));
Stream.Free;
saveDialog.Free;
ファイル暗号化用の.txtの場所を取得します。
procedure TForm1.Button4Click(Sender: TObject);
var
fileName : string;
holder_obj : TSerial_number;
begin
holder_obj := Tserial_number.Create;
listbox4.Clear;
if OpenTextFileDialog1.Execute() then
fileName := OpenTextFileDialog1.FileName;
listbox4.AddItem(filename, holder_obj);
end;
ファイル暗号化:
Codec2.Password := WORD_2;
sCrypt := glb_fileName1 + '_enc.txt';
Codec2.EncryptFile(glb_fileName1+'.txt', sCrypt);
復号化のために暗号化されたファイルを取得します。
procedure TForm1.Button3Click(Sender: TObject);
var
holder_obj : TSerial_number;
begin
holder_obj := Tserial_number.Create;
listbox3.Clear;
if OpenTextFileDialog1.Execute() then
glb_fileName2 := OpenTextFileDialog1.FileName;
listbox3.AddItem(glb_filename2, holder_obj);
end;
ファイルの復号化(ストリームを開いて、復号化されたファイルを取得したら、そのファイルに含まれる暗号化された文字列を復号化できるようにします):
procedure TForm1.Button5Click(Sender: TObject);
var
saveDialog : TSaveDialog;
begin
saveDialog := TSaveDialog.Create(self);
saveDialog.Title := 'Choose location to save Decrypted Authentication Code';
saveDialog.InitialDir := 'C:\';
saveDialog.DefaultExt := '';
saveDialog.Execute();
glb_fileName1:= saveDialog.FileName;
//open stream and write cipher to a .txt of chosen location
try
Stream := TFileStream.Create(saveDialog.GetNamePath + saveDialog.FileName + '.txt', fmOpenReadWrite);
except
Stream := TFileStream.Create(saveDialog.GetNamePath + saveDialog.FileName + '.txt', fmCreate);
end;
Stream.Free;
Codec2.Password := WORD_2;
Codec2.DecryptFile(glb_fileName2, saveDialog.FileName + '.txt');
saveDialog.Free;
end;