270377132 发表于 2020-4-9 08:27

大佬帮个忙,怎么写

http://www.52rx.com/forum.php?x=549879
//解密
function Decode(source : string):string;
var
Source_Len,Len : integer;
Count,c1,c2 : integer;
code : array of byte;
a1,a2 : byte;
ind : dword;
Decode_Str : string;
label L1,L2;
   begin
       Result := '';
       Decode_Str := '';
       code := $fc;
       code := $f0;
       code := $c0;
       Len := 0;
       a1 := 0;
       a2 := 0;
       c1 := 2;
       c2 := 0;
       ind := 0;
       Count := 0;
       Source_Len := Length(source);
while (Count < Source_Len) do
begin
       if(ord(Source) - $3c) < 0 then
      begin
      Decode_Str := Decode_Str + Source;
      inc(Len);
         inc(Count);
      a1 := 0;
      a2 := 0;
      c1 := 2;
      c2 := 0;
      ind := 0;
      Continue;
//break;
end;
a1 := ord(Source) - $3c;
if Len >= Source_Len then
begin
break;
end;
if (c2 + 6) < 8 then
begin
goto L2;
end;
ind := a1 and $3f;
ind := ind shr (6-c1);
Decode_Str := Decode_Str + chr(ind or a2);
Inc(Len);
c2 := 0;
if c1 >= 6 then
begin
c1 := 2;
goto L1;
end;
inc(c1,2);
L2 :a2 := a1 shl c1;
a2 := a2 and code;
c2 := c2 + (8 - c1);
L1 :inc(count);
end;
SetLength(Decode_Str,Len);
Result := Decode_Str;
end;




以上的解密函数,怎么用,解密出来并转换成字符串 看看这个有没有错了
有没有大佬帮帮我,万分感谢啊


edit2=23 32 6C 48 56 6F 41 4C 3C 3C 3C 3C 3E 78 3C 3C 3C 3C 52 68 70 3E 3C 3C 64 5A 7A 5D 77 78 4E 63 65 48 76 79 75 46 43 6B 64 5A 78 21    解密这个

冥界3大法王 发表于 2020-4-9 09:35

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;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
function Decode(source: string): string;
var
Source_Len, Len: integer;
Count, c1, c2: integer;
code: array of byte;
a1, a2: byte;
ind: dword;
Decode_Str: string;
label
L1, L2;
begin
Result := '';
Decode_Str := '';
code := $fc;
code := $f0;
code := $c0;
Len := 0;
a1 := 0;
a2 := 0;
c1 := 2;
c2 := 0;
ind := 0;
Count := 0;
Source_Len := Length(source);
while (Count < Source_Len) do
begin
    if (ord(source) - $3c) < 0 then
    begin
      Decode_Str := Decode_Str + source;
      inc(Len);
      inc(Count);
      a1 := 0;
      a2 := 0;
      c1 := 2;
      c2 := 0;
      ind := 0;
      Continue;
//break;
    end;
    a1 := ord(source) - $3c;
    if Len >= Source_Len then
    begin
      break;
    end;
    if (c2 + 6) < 8 then
    begin
      goto L2;
    end;
    ind := a1 and $3f;
    ind := ind shr (6 - c1);
    Decode_Str := Decode_Str + chr(ind or a2);
    Inc(Len);
    c2 := 0;
    if c1 >= 6 then
    begin
      c1 := 2;
      goto L1;
    end;
    inc(c1, 2);
L2:
    a2 := a1 shl c1;
    a2 := a2 and code;
    c2 := c2 + (8 - c1);
L1:
    inc(Count);
end;
SetLength(Decode_Str, Len);
Result := Decode_Str;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowMessage(Decode(edit1.Text));
end;

end.

也不知是不是这样的?{:301_971:}

270377132 发表于 2020-4-9 09:44

冥界3大法王 发表于 2020-4-9 09:35
unit Unit1;

interface


那怎么转字符串呢,会不会有问题呢

sail2000 发表于 2020-4-9 10:03

270377132 发表于 2020-4-9 09:44
那怎么转字符串呢,会不会有问题呢

这函数返回的直接就是字符串,还想怎么转?

270377132 发表于 2020-4-9 10:06

sail2000 发表于 2020-4-9 10:03
这函数返回的直接就是字符串,还想怎么转?

不是吧,我调用是16进制的

sail2000 发表于 2020-4-9 10:36

270377132 发表于 2020-4-9 10:06
不是吧,我调用是16进制的

你的问题是想看明文,而不是说字符串。。。
而且你的密文解密后明文都不给出来,让大家去猜嘛?

270377132 发表于 2020-4-9 10:46

sail2000 发表于 2020-4-9 10:36
你的问题是想看明文,而不是说字符串。。。
而且你的密文解密后明文都不给出来,让大家去猜嘛?

对的,,明文怎么说呢,后面的是★★魔の戒★★ 这个字符串,我的意思是整条的解密出来,显示出明文来,但是我怎么弄好像都有点问题不知道哪的问题

我这样调用 要把16进制转成字符串解密然后出来的结果不对啊 但是我拿后面的 64 5A 7A 5D 77 78 4E 63 65 48 76 79 75 46 43 6B 64 5A 78 这样解又可以
procedure TForm1.Button1Click(Sender: TObject);

ShowMessage(Decode(HexStrToStr(edit1.Text)));
end;
页: [1]
查看完整版本: 大佬帮个忙,怎么写