帮忙看看这段代码是干什么的.逆水大哥,来确定一下怎么分分吧。 (300分)

  • 主题发起人 主题发起人 LeeChange
  • 开始时间 开始时间
L

LeeChange

Unregistered / Unconfirmed
GUEST, unregistred user!
受人之托,分析以下代码并改进之.
但在下实在是水平有限,还望各位大侠鼎立相助.看懂其意义者有分.
procedure TForm1.Button1Click(Sender: TObject);
VAR
S,S2,S3,S4,s5,s6,s7,s8,s9,s10:STRING;
I,J:INTEGER;
begin
S2:=EDIT1.TEXT;
S3:=EDIT2.TEXT;
for i:=1 to length(s2) div 2 do

s4:=s4+copy(s2,length(s2)-2*i+1,2);
//字符到取;
s5:=stringofchar('0',12- length(s4))+s5;
// 补零;
s6:=s5+s2;
//到取的EDIT。TEXT;
s7 := IntToHex(StrToInt64(S6),2);
//化成十六进制数。;
s8:= IntToHex(StrToInt64(S3),2);
// 化成十六进制数;
FOR I:=1 TO LENGTH(EDIT1.TEXT) do
begin
s9:= S9+CHR( NOT (ORD(S7))) ;//EDIT1中十六进制数取反。
s10:=s10+chr(ord(s9) xor ord(s8));
//EDIT1与EDIT2中十六进制数异或。
edit3.text:=s10;
end;

end;
 
我觉得
s5:=stringofchar('0',12- length(s4))+s5;
// 补零;
是不可能实现补齐12位的.不知道大家的意见.
 
试试就知道了,只有10位
 
太乱了,太多无用功了[:D]
前面一大段来个HexToBin就搞定了
看其本意也就是简单的加密而已
至于这里 s5:=stringofchar('0',12- length(s4))+s5;
// 补零;
假如 edit1.txt 长度为奇,那就是错误的
为偶的话应该没问题
 
我也有同感,确实太多无用功了,
看意思是要把EDIT1好EDIT2中输入的数字经过变换后在EDIT3中显示出来。
但变换过程用字符串来处理总觉得不妥。
 
是加密用的
 
for i:=1 to length(s2) div 2 do
s4:=s4+copy(s2,length(s2)-2*i+1,2);
//字符到取;
这里还反转了一下,不过如果字数为奇应该会有问题
补零为偶应该还是没有问题的
 
"s5:=stringofchar('0',12- length(s4))+s5;
"
^
是有问题的,s5的初试值没有!
 
小弟初学,乱猜的,请大家别取笑。我觉得这段代码是想用一个数值型的密钥加密另一个数值。首先Edit1中输入的为密码,Edit2输入的是欲加密的数值。
S2:=EDIT1.TEXT;
S3:=EDIT2.TEXT;
for i:=1 to length(s2) div 2 do
s4:=s4+copy(s2,length(s2)-2*i+1,2);
//这句的意思似乎是要实现按双字节反转,但结果好像有违初衷:
//比如"1234ABCD",反转后则变成了:"CDAB3412",这没错;
//但字串长度是奇数时,如"1234ABC",反转后变成了:"BC4A23",首字符('1')丢失。

s5:=stringofchar('0',12- length(s4))+s5;

//补零可能是为了固定长度,解密时方便读取,而且后面的+s5应该是+s4;
s6:=s5+s2;
//将反转过的密钥(s5)与原密钥(s2)合并组成新的密钥。
s7 := IntToHex(StrToInt64(S6),2);
//化成十六进制数。;
s8:= IntToHex(StrToInt64(S3),2);
//这是需加密的原文数值
FOR I:=1 TO LENGTH(EDIT1.TEXT) do
begin
s9:= S9+CHR( NOT (ORD(S7)));
//先取反再加密
s10:=s10+chr(ord(s9) xor ord(s8));
//可能是想逐字节异或加密
edit3.text:=s10;
//想要显示加密后的密文,但不应该放在这里,应该放在循环体之外
end;

 
前面的很多都說了,我說一點
ASCII碼異或有時會有意想不到的地方,比如結果在控制字符處,顯示不出來。
而且有可能有一些字符呀(怪漢字,符號什麼的)
 
对呀!如果汉字和字母数字在一起,恐怕要闹情绪了!
加密程序不用太离谱了;
如果搞专业加密的还可以,普通的嘛就写个简单的算了!
现在的解密程序都很厉害的!
 
有加密的味道,但是只能加密数值型的,最好能说出代码的大概来源。
 
楼主忙着赚分,却无探讨问题之意!
这么多回复即使没到点子,你也该出来说一句话![:(!]
 
呵呵,这一两个星期所发的帖子平均一下不到1贴/天,这样也能赚分?
 
此贴结束于否由不得我,真正提问的人也在天天关注此贴,他老人家什么时候喊:"结了",我就结.如果是此贴刚诞生时在线的富翁会发现,当时有非常类似的帖子,那个楼主才是正主.
 
很粗劣的加密手段!!!
宁愿舍弃不去研究!!!
 
继续努力,由这样简单的加密到复杂的加密需要在研究一下一些加密算法
des,rsa等等。
 
to LeeChange:
1."呵呵,这一两个星期所发的帖子平均一下不到1贴/天,这样也能赚分? "
是发帖得分吗?是回复赚分.你看看这轮你得的分?还不是在赚分?
2."贴结束于否由不得我,真正提问的人也在天天关注此贴,他老人家什么时候喊:"结了",我就结."
我不管谁是正主,你是这个问题的楼主,谁要你结帖了?
我看这么多人在回复,你却有视无睹,这么也得回答一下人家说到你的问题上了没有.
你解释了一堆,却没有回答大家说的东西.哪里像个样子!
至少也要尊重一下人家的劳动吧?你至少也是个老大富翁了.
 
呵呵,我说的发帖包括“跟贴”。
照您的说法,我只有不回答任何人的问题才能叫做不在赚分。哈哈。
 
后退
顶部