首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

哪位高手能帮忙看看,这个用来加密和解密的叫什么算法?大家都再用嘛

2012-03-09 
谁能帮忙看看,这个用来加密和解密的叫什么算法?大家都再用嘛? functionTForm1.encryptstr(consts:strings

谁能帮忙看看,这个用来加密和解密的叫什么算法?大家都再用嘛?

function   TForm1.encryptstr(const   s:string;   skey:string):string;
var
        i,j:   integer;
        hexS,hexskey,midS,tmpstr: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   :=   tmpstr;
end;

function   TForm1.decryptstr(const   s:string;   skey:string):string;
var
        i,j:   integer;
        hexS,hexskey,midS,tmpstr:string;
        a,b,c:byte;
begin
        hexS     :=s;//应该是该字符串
        if   length(hexS)   mod   2=1   then
        begin
                showmessage( '密文错误! ');
                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   :=   myHextoStr(tmpstr);
end;

[解决办法]
嗯,研究看看。
[解决办法]
function TForm1.encryptstr(const s:string; skey:string):string; // BB A
var
i,j: integer;
hexS,hexskey,midS,tmpstr:string;
a,b,c:byte;
begin
hexS :=myStrtoHex(s); //母串转为字符16进形式 4242
hexskey:=myStrtoHex(skey); //key串............. 41
midS :=hexS; // 4242
for i:=1 to (length(hexskey) div 2) do //1~2
begin
//if i <> 1 then midS:= tmpstr; //如果不是从头开始 复杂在这里。
tmpstr:= ' ';
for j:=1 to (length(midS) div 2) do //从母串16进的第一个“字节”开始循环 J++
begin
a:=strtoint( '$ '+midS[2*j-1]+midS[2*j]); //母串每个“字节”转为整型a 66 66
b:=strtoint( '$ '+hexskey[2*i-1]+hexskey[2*i]); //key串每个“字节”转为整型a 母串全部循环完,才右移key串 65
c:=a xor b; //异或 66 xor 65 == 3
tmpstr := tmpstr+myStrtoHex(chr(c)); //异或后转为字符并连接为返回字串 '03 ' + '03 '
end;
end;
result := tmpstr;
end;
[解决办法]
这种加解密方法很容易就被破解了。不过这算法好像很常见。具体叫什么名字就不知道了。有点像ACCESS数据库里用对密码的加密算法

热点排行