如何在没有第三方包的情况下在 Delphi 中应用简单的 XOR encryption/decryption 机制?
How can I apply a simple XOR encryption/decryption mechanism in Delphi with no third party packages?
如何在 Delphi 中正确应用文件 encryption/decryption 机制?
我发现了一个非常古老的资源,据称可以教如何做到这一点,但使用的是字符串。在我之前的问题之后,这似乎不是正确的方法。相反,我应该执行字节操作。这是我的旧消息来源的建议:
1-) 使用旧的绑定 C 函数读取文件:
function ReadFile(path: String): AnsiString;
var
file: File;
type: Byte;
begin
type:= FileMode;
try
FileMode := 0;
AssignFile(file, path);
{$I-}
Reset(file, 1);
{$I+}
if IOResult = 0 then
try
SetLength(Result, FileSize(file));
if Length(Result) > 0 then
begin
{$I-}
BlockRead(file, Result[1], Length(Result));
{$I+}
if IOResult <> 0 then
Result := '';
end;
finally
CloseFile(file);
end;
finally
FileMode := type;
end;
end;
2-)
在这个巨大的 AnsiString 上逐个字符地应用 XOR 操作,如下所示:
function Xor(Buffer: String; Key: integer): String;
var
i, c, x: integer;
begin
for i := 1 to Length(Buffer) do
begin
c := integer(Buffer[i]);
x := c xor Key;
Result := Result + Char(x);
end;
end;
但是之后的问题,也是我的来源 NOT 展示的,是如何将这个转换后的字符串转换回字节,这样我就可以有一个功能资源来写回一个新的解密文件。
显然这不是加密和解密文件的正确方法。有人可以向我解释正确的正确方法吗:
读取一个文件,应用基本的异或加密机制,然后能够再次读取这个文件,解密它并使用这个有效的二进制(DLL,EXE)数据写回一个新的解密文件?
“简单的异或加密”不会提高应用程序的安全性。确保添加一条注释,通知任何 reader 这不会带来任何安全好处,因为它可能会使其他开发人员感到困惑,认为它提高了抵御攻击者的门槛。如果这是一个安全系统,那么您需要使用 AES 进行加密或使用 SHA-256/SHA3 进行哈希处理,或使用 PBKDF2/Scrypt 进行密码存储。
话虽这么说,GitHub 搜索很强大,这里是一些 delphi 混淆位的代码:
https://github.com/EonaCat/NightBitsEncryptor/blob/master/NightBitsEncryptor.pas
上面的代码虽然晦涩难懂但不安全,绝不能用作安全系统。
如何在 Delphi 中正确应用文件 encryption/decryption 机制?
我发现了一个非常古老的资源,据称可以教如何做到这一点,但使用的是字符串。在我之前的问题之后,这似乎不是正确的方法。相反,我应该执行字节操作。这是我的旧消息来源的建议:
1-) 使用旧的绑定 C 函数读取文件:
function ReadFile(path: String): AnsiString;
var
file: File;
type: Byte;
begin
type:= FileMode;
try
FileMode := 0;
AssignFile(file, path);
{$I-}
Reset(file, 1);
{$I+}
if IOResult = 0 then
try
SetLength(Result, FileSize(file));
if Length(Result) > 0 then
begin
{$I-}
BlockRead(file, Result[1], Length(Result));
{$I+}
if IOResult <> 0 then
Result := '';
end;
finally
CloseFile(file);
end;
finally
FileMode := type;
end;
end;
2-) 在这个巨大的 AnsiString 上逐个字符地应用 XOR 操作,如下所示:
function Xor(Buffer: String; Key: integer): String;
var
i, c, x: integer;
begin
for i := 1 to Length(Buffer) do
begin
c := integer(Buffer[i]);
x := c xor Key;
Result := Result + Char(x);
end;
end;
但是之后的问题,也是我的来源 NOT 展示的,是如何将这个转换后的字符串转换回字节,这样我就可以有一个功能资源来写回一个新的解密文件。
显然这不是加密和解密文件的正确方法。有人可以向我解释正确的正确方法吗:
读取一个文件,应用基本的异或加密机制,然后能够再次读取这个文件,解密它并使用这个有效的二进制(DLL,EXE)数据写回一个新的解密文件?
“简单的异或加密”不会提高应用程序的安全性。确保添加一条注释,通知任何 reader 这不会带来任何安全好处,因为它可能会使其他开发人员感到困惑,认为它提高了抵御攻击者的门槛。如果这是一个安全系统,那么您需要使用 AES 进行加密或使用 SHA-256/SHA3 进行哈希处理,或使用 PBKDF2/Scrypt 进行密码存储。
话虽这么说,GitHub 搜索很强大,这里是一些 delphi 混淆位的代码: https://github.com/EonaCat/NightBitsEncryptor/blob/master/NightBitsEncryptor.pas
上面的代码虽然晦涩难懂但不安全,绝不能用作安全系统。