无情老皮蛋 发表于 2020-9-25 22:29

还有没有会DelPhi的老哥存在、、

function Encode(source : string):string;
var
Source_Len,Len : integer;
Count,c : integer;
a1,a2 : byte;
ind : dword;
Encode_Str : string;
begin
Result := '';
Encode_Str := '';
Len := 0;
a1 := 0;
a2 := 0;
c := 0;
ind := 0;
Count := 0;
Source_Len := Length(source);
while Count < Source_Len do
begin
if Len >= $2710 then
break;
ind := ord(source);
ind := ind shr (c+2);
a1 := ind or a2;
a1 := a1 and $3f;
ind := ord(source);
ind := ind shl (8-(c+2));
ind := ind shr 2;
a2 := ind and $3f;
inc(c,2);
if c >= 6 then
begin
if Len >= $270f then
begin
Encode_Str := Encode_Str + chr(a1 + $3c);
inc(Len);
end
else
begin
Encode_Str := Encode_Str + chr(a1 + $3c);
Encode_Str := Encode_Str + chr(a2 + $3c);
Inc(Len,2);
end;
c := 0;
a2 := 0;
end
else
begin
Encode_Str := Encode_Str + chr(a1 + $3c);
Inc(Len);
end;
inc(Count);
end;
if c > 0 then
begin
Encode_Str := Encode_Str + chr(a2 + $3c);
Inc(Len);
end;
SetLength(Encode_Str,Len);
Result := Encode_Str;
end;
能否帮忙解释一下这段加密。或者翻译成C语言
感谢

冥界3大法王 发表于 2020-9-25 23:04

本帖最后由 冥界3大法王 于 2020-9-25 23:05 编辑

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls;

type
TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function Encode(source: string): string;
var
Source_Len, Len: integer;
Count, c: integer;
a1, a2: byte;
ind: dword;
Encode_Str: string;
begin
Result := '';
Encode_Str := '';
Len := 0;
a1 := 0;
a2 := 0;
c := 0;
ind := 0;
Count := 0;
Source_Len := Length(source);
while Count < Source_Len do
begin
    if Len >= $2710 then
      break;
    ind := ord(source);
    ind := ind shr (c + 2);
    a1 := ind or a2;
    a1 := a1 and $3f;
    ind := ord(source);
    ind := ind shl (8 - (c + 2));
    ind := ind shr 2;
    a2 := ind and $3f;
    inc(c, 2);
    if c >= 6 then
    begin
      if Len >= $270f then
      begin
      Encode_Str := Encode_Str + chr(a1 + $3c);
      inc(Len);
      end
      else
      begin
      Encode_Str := Encode_Str + chr(a1 + $3c);
      Encode_Str := Encode_Str + chr(a2 + $3c);
      Inc(Len, 2);
      end;
      c := 0;
      a2 := 0;
    end
    else
    begin
      Encode_Str := Encode_Str + chr(a1 + $3c);
      Inc(Len);
    end;
    inc(Count);
end;
if c > 0 then
begin
    Encode_Str := Encode_Str + chr(a2 + $3c);
    Inc(Len);
end;
SetLength(Encode_Str, Len);
Result := Encode_Str;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Encode('ABCDEFGHIJKLMNOPQRSTUVWXYZ'));
end;

end.

F9编译后

链接: https://pan.baidu.com/s/13YONQO9fDtdXCiQgRDsrlg 提取码: m9b9
你自己IDAF5 吧

jjyywg 发表于 2020-9-26 07:13

厉害,学习了

xfwb 发表于 2020-9-26 07:38

厉害,值得我们学习。

xuanle 发表于 2020-9-26 08:39

本帖最后由 xuanle 于 2020-9-26 08:44 编辑

delphi7中string字符串,取单个字符是从1开始,不是象C那样从0开始

s1,s2: string
s1:='ABCD';
s2:=s1; //第一个字符等于 A

ord 是 取ascii码
shl 是 向左位移
shr 是 向右位移
or 是 或
and 是 与
chr 转换成字符
Length 是计算字符串长度, 一个汉字算2个
SetLength 是设置字符串长度
Inc 是加 1,   Inc(Len, 2); 是加2
$ 是 十六进制

delphi变量不区分大小写

页: [1]
查看完整版本: 还有没有会DelPhi的老哥存在、、