大佬帮个忙,怎么写
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 解密这个 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:} 冥界3大法王 发表于 2020-4-9 09:35
unit Unit1;
interface
那怎么转字符串呢,会不会有问题呢 270377132 发表于 2020-4-9 09:44
那怎么转字符串呢,会不会有问题呢
这函数返回的直接就是字符串,还想怎么转? sail2000 发表于 2020-4-9 10:03
这函数返回的直接就是字符串,还想怎么转?
不是吧,我调用是16进制的 270377132 发表于 2020-4-9 10:06
不是吧,我调用是16进制的
你的问题是想看明文,而不是说字符串。。。
而且你的密文解密后明文都不给出来,让大家去猜嘛? 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]