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

hugoon 2007-02-12 09:53:05

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;
...全文
218 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanr520 2007-02-13
  • 打赏
  • 举报
回复
这种加解密方法很容易就被破解了。不过这算法好像很常见。具体叫什么名字就不知道了。有点像ACCESS数据库里用对密码的加密算法
hugoon 2007-02-13
  • 打赏
  • 举报
回复
非常感谢你!我再慢慢看看吧!
lihuasoft 2007-02-12
  • 打赏
  • 举报
回复
if i<>1 then midS:= tmpstr; //如果不是从头开始 复杂在这里。
------------------------------------------------------------
也不复杂,这个,是保证上面注解里的 J++ 的。就是说,每一次J循环完,就加1
lihuasoft 2007-02-12
  • 打赏
  • 举报
回复
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;
lihuasoft 2007-02-12
  • 打赏
  • 举报
回复
我看错了。现在在看
hugoon 2007-02-12
  • 打赏
  • 举报
回复
这个是我收集的,不是我写的。我现在想弄懂它,但是看不懂啊!
lihuasoft 2007-02-12
  • 打赏
  • 举报
回复
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
到此为止,我只看到 tmpstr == '' 那么,它下面的for.....有意义吗?
hugoon 2007-02-12
  • 打赏
  • 举报
回复
呵呵,所以羞愧啊!能直接聊聊嘛?

QQ:12814574
MSN:gghugx@hotmail.com
lihuasoft 2007-02-12
  • 打赏
  • 举报
回复
你的MyStrToHex不如我写得简练啊... ^_^

encryptstr函数好象有错误....别的我还没看
hugoon 2007-02-12
  • 打赏
  • 举报
回复
兄弟,你很厉害啊,很佩服!
lihuasoft 2007-02-12
  • 打赏
  • 举报
回复
哦,第二个我写错了(急了,简单思路了)
hugoon 2007-02-12
  • 打赏
  • 举报
回复
上上楼的兄弟,能说说这个算法的逻辑表达嘛?

联系:

QQ:12814574
MSN:gghugx@hotmail.com
E-Mail:hugoon@tom.com
hugoon 2007-02-12
  • 打赏
  • 举报
回复
呵呵,高手!好羞愧啊!

function TForm1.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 TForm1.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;
lihuasoft 2007-02-12
  • 打赏
  • 举报
回复
好象楼主还有两个自定义函数(myHexToStr、myStrToHex)没有贴出来。我猜测着写了两个,楼主看一下,是不是差不多:

function TForm1.myStrtoHex(sIn: string): string;
var
I : integer;
begin
result := '';
for I := 1 to Length(sIn) do
result := result + Format('%.2x',[Ord(sIn[I])]);
end;

function TForm1.myHextoStr(sIn : string) : string;
var
I : integer;
begin
result := '';
for I := 1 to Length(sIn) do
result := result + Format('%.2x',[Ord(sIn[I])]);
end;

如果是这样的效果,才能继续。
hugoon 2007-02-12
  • 打赏
  • 举报
回复
谢谢你!
在线期待。
能用数学表达式子表达出来嘛?
pilicat 2007-02-12
  • 打赏
  • 举报
回复
嗯,研究看看。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧