use*_*124 1 delphi delphi-2010
我有一个用XOR加密的在线TXT文件.我正在使用Indy HTTP来读取此文件.当我这样做:
Buff.Text:= HTTP.Get('http://www.blabla.com/xor.txt');
Run Code Online (Sandbox Code Playgroud)
Buff中的内容已损坏,我无法正确解密.怎么解决这个?下面我将粘贴我正在使用的函数来对Xxt文件进行XOR:
function TForm1.XorStr(Input: AnsiString; Seed: integer): AnsiString;
var
i : integer;
Output : AnsiString;
begin
Output := '';
for i := 1 to Length(Input) do
Output := Output + AnsiChar(Ord(Input[i]) XOR (Seed));
Result:= Output;
end;
Run Code Online (Sandbox Code Playgroud)
希望有人可以帮助我.感谢你们!
Rem*_*eau 10
您正在使用重载版本的下载数据TIdHTTP.Get(),它返回一个UnicodeString.该版本将根据服务器Content-Type响应头中指定(或缺失)的字符集将原始数据解码为Unicode .对于您尝试执行的操作,会破坏您的数据.您需要使用其他重载版本TIdHTTP.Get()来填充TStream原始数据,然后您可以对其进行解码,例如:
var
Strm: TMemoryStream;
Output: AnsiString;
begin
...
Strm := TMemoryStream.Create;
try
HTTP.Get('http://www.blabla.com/xor.txt', Strm);
Output := XorStr(Strm.Memory, Strm.Size, Seed);
finally
Strm.Free;
end;
...
end;
function TForm1.XorStr(Input: Pointer; InputSize: NativeInt; Seed: Integer): AnsiString;
var
i : integer;
begin
SetString(Result, PAnsiChar(Input), InputSize);
for i := 1 to Length(Result) do
Result[i] := AnsiChar(Ord(Result[i]) XOR Seed);
end;
Run Code Online (Sandbox Code Playgroud)