因此,我当前的任务涉及获取给定的文本字符串(例如:ABC123)并使用 LockBox3 的 EncryptString(source, target) 函数对其进行加密。我可以成功加密字符串并将输出保存到 .txt 文件中。
此过程的下一步是使用 LockBox3 的 EncryptFile(source, target) 函数获取包含我已经加密的字符串的 .txt 并使用 AES-128 加密所述文件(与字符串加密相同,但密码不同)
基本上,我可以让字符串正确加密并输出到 .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;