library StrEntry;
uses
  SysUtils,
  Classes;
{$R *.res}function myStrtoHex(s: string): string;var tmpstr:string;
    i:integer;
begin
    tmpstr := '';
    for i:=1 to length(s) do
    begin
        tmpstr := tmpstr + inttoHex(ord(s[i]),2);
    end;
    result := tmpstr;
end;function myHextoStr(S: string): string;var hexS,tmpstr:string;
    i:integer;
    a:byte;
begin
    hexS  :=s;//应该是该字符串
    if length(hexS) mod 2=1 then
    begin
        hexS:=hexS+'0';
    end;
    tmpstr:='';
    for i:=1 to (length(hexS) div 2) do
    begin
        a:=strtoint('$'+hexS[2*i-1]+hexS[2*i]);
        tmpstr := tmpstr+chr(a);
    end;
    result :=tmpstr;
end;function encryptstr(const s:string; skey:string;tmpstr:string):integer;var
    i,j: integer;
    hexS,hexskey,midS:string;
    a,b,c:byte;
begin
    hexS   :=myStrtoHex(s);
    hexskey:=myStrtoHex(skey);
    midS   :=hexS;
    for i:=1 to (length(hexskey) div 2)   do
    begin
        if i<>1 then midS:= tmpstr;
        tmpstr:='';
        for j:=1 to (length(midS) div 2) do
        begin
            a:=strtoint('$'+midS[2*j-1]+midS[2*j]);
            b:=strtoint('$'+hexskey[2*i-1]+hexskey[2*i]);
            c:=a xor b;
            tmpstr := tmpstr+myStrtoHex(chr(c));
        end;
    end;
    result := 1;
end;function decryptstr(const s:string; skey:string;tmpstr:string):integer;var
    i,j: integer;
    hexS,hexskey,midS:string;
    a,b,c:byte;
begin
    hexS  :=s;//应该是该字符串
    if length(hexS) mod 2=1 then
    begin
       // showmessage('密文错误!');
     result:=-1;
    end;
    hexskey:=myStrtoHex(skey);
    tmpstr :=hexS;
    midS   :=hexS;
    for i:=(length(hexskey) div 2) downto 1 do
    begin
        if i<>(length(hexskey) div 2) then midS:= tmpstr;
        tmpstr:='';
        for j:=1 to (length(midS) div 2) do
        begin
            a:=strtoint('$'+midS[2*j-1]+midS[2*j]);
            b:=strtoint('$'+hexskey[2*i-1]+hexskey[2*i]);
            c:=a xor b;
            tmpstr := tmpstr+myStrtoHex(chr(c));
        end;
    end;
    tmpstr:=myHextoStr(tmpstr);
    result:=1;
end;exports   encryptstr,
   decryptstr;
 
beginend.

解决方案 »

  1.   

    写成dll吧,string类型改为pchar类型,通用
      

  2.   

    改了红色的部分报错
    function decryptstr(const s:string; skey:string):Pchar; stdcall;var 
        i,j: integer; 
        hexS,hexskey,midS,tmpstr:string; 
        a,b,c:byte; 
    begin
        hexS  :=s;//应该是该字符串
       // if length(hexS) mod 2=1 then
       // begin
        //   exit;
      //  end;
        hexskey:=myStrtoHex(skey); 
        tmpstr :=hexS; 
        midS  :=hexS; 
        for i:=(length(hexskey) div 2) downto 1 do 
        begin 
            if i <>(length(hexskey) div 2) then midS:= tmpstr; 
            tmpstr:=''; 
            for j:=1 to (length(midS) div 2) do 
            begin 
                a:=strtoint('$'+midS[2*j-1]+midS[2*j]); 
                b:=strtoint('$'+hexskey[2*i-1]+hexskey[2*i]); 
                c:=a xor b; 
                tmpstr := tmpstr+myStrtoHex(chr(c)); 
            end; 
        end; 
        result := Pchar(myHextoStr(tmpstr));
    end;