gpt4 book ai didi

PHP 函数到 Delphi 函数

转载 作者:行者123 更新时间:2023-12-03 19:11:43 30 4
gpt4 key购买 nike

我正在尝试创建一个 PHP 脚本和一个 Delphi 程序来与它“交谈”。为了保证它的安全,我想加密来自双方的传出文本,所以它使得在两端使用相同的加密功能。

这是我为 PHP 找到的函数:

function convert($str,$ky=''){
if($ky=='')return $str;
$ky=str_replace(chr(32),'',$ky);
if(strlen($ky)<8)exit('key error');
$kl=strlen($ky)<32?strlen($ky):32;
$k=array();
for($i=0;$i<$kl;$i++){
$k[$i]=ord($ky{$i})&0x1F;
}
$j=0;
for($i=0;$i<strlen($str);$i++){
$e=ord($str{$i});
$str{$i}=$e&0xE0?chr($e^$k[$j]):chr($e);
$j++;
$j=$j==$kl?0:$j;
}
return $str;
}

我似乎无法将其转换为 Delphi。非常感谢您的帮助!
谢谢,杰夫

最佳答案

它是一个接收两个字符串并返回另一个字符串的函数。我将在注释中包含变量声明,因为它们是在代码中引入的;把它们放在函数的顶部。

function convert(str: AnsiString; const key: AnsiString = ''): AnsiString;

如果键为空,那么结果就是 str :
begin
if key = '' then
Exit(str);

第一个参数是要“加密”的值,第二个参数是用于加密的 key 。 key 至少需要八个非空格字符;超过 32 的任何内容都将被忽略。如果 key 太短,PHP 脚本将终止;我们将使用 Delphi 的 Assert而是声明,因为很明显,如果 key 错误,代码甚至不应该执行。 (脚本终止不是用户期望修复的可恢复错误。)PHP 代码使用 ?:运算符选择所需的长度值,但 Delphi 的 Min函数(来自数学单元)更清楚地表达了愿望。
  // var ky: AnsiString;
ky := StringReplace(key, ' ', '', [rfReplaceAll]);
Assert(Length(ky) >= 8, 'key error');
// var kl: Integer;
kl := Min(Length(ky), 32);

数组 k用于保存表示 key 中每个字符的低五位的数字。在 PHP 中,数组会根据所使用的索引自动增长到所需的大小。在Delphi中,我们需要提前分配空间。由于它设置在遍历键的每个字符的循环中,因此我们知道数组的长度相同。
  // var k: array of Byte;
SetLength(k, kl);
// var i: Integer;
for i := 0 to Pred(kl) do
k[i] := Ord(ky[i+1]) and $1f;

接下来,根据 k 中的每个连续字节修改字符串中设置第七位的每个字符。大批。 j变量跟踪我们接下来将使用哪个 key 字节。
  // var j: Integer;
j := 0;
for i := 1 to Length(str) do begin
// var e: Byte;
e := Ord(str[i]);
if (e and $e0) <> 0 then
str[i] := AnsiChar(e xor k[j]);
Inc(j);
if j = kl then
j := 0;
// The previous three lines can also be written j := (j + 1) mod kl
end;

最后,我们返回 str 的新值:
  Result := str;
end;

关于PHP 函数到 Delphi 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4807712/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com