写了加密算法,再怎么解密呢 ( 积分: 100 )

  • 主题发起人 crystal_fly
  • 开始时间
C

crystal_fly

Unregistered / Unconfirmed
GUEST, unregistred user!
我的加密是这样的 但是写的解密却总是出错 到底该怎么写呢~~帮帮忙~~谢谢
procedure TForm1.Button2Click(Sender: TObject);
var
i,j,n,k,l: Integer;
s: String;
begin
//加密算法实现
n:=length(Form2.password);
if (n>length(memo1.Text)) then
l:=0
else
l:=1;
t:=memo1.Text;
memo2.Clear;
case l of
0:
begin
for k:=1 to Length(memo1.Text)do
begin
s:=memo1.Lines.Strings[0];
if (ord(s[k])<>13) and (ord(s[k])<>10) and (ord(s[k])<>32) then
s[k]:=chr(ord(s[k]) xor ord(Form2.password[k]));
end;
memo2.Lines.Add(s);
end;
1:
for i:=0 to memo1.Lines.Count-1do
begin
s:=memo1.Lines.Strings;
for j:=1 to length(s)do
begin
if (ord(s[j])<>13) and (ord(s[j])<>10) and (ord(s[j])<>32) then
begin
if (j<=n) then
s[j]:=chr(ord(s[j]) xor ord(Form2.password[j]))
else
s[j]:=chr(ord(s[j]) xor ord(Form2.password[j mod n]));
end;
end;
memo2.Lines.Add(s);
end;
end;
memo1.Clear;
memo3.Clear;
end;
 
我的加密是这样的 但是写的解密却总是出错 到底该怎么写呢~~帮帮忙~~谢谢
procedure TForm1.Button2Click(Sender: TObject);
var
i,j,n,k,l: Integer;
s: String;
begin
//加密算法实现
n:=length(Form2.password);
if (n>length(memo1.Text)) then
l:=0
else
l:=1;
t:=memo1.Text;
memo2.Clear;
case l of
0:
begin
for k:=1 to Length(memo1.Text)do
begin
s:=memo1.Lines.Strings[0];
if (ord(s[k])<>13) and (ord(s[k])<>10) and (ord(s[k])<>32) then
s[k]:=chr(ord(s[k]) xor ord(Form2.password[k]));
end;
memo2.Lines.Add(s);
end;
1:
for i:=0 to memo1.Lines.Count-1do
begin
s:=memo1.Lines.Strings;
for j:=1 to length(s)do
begin
if (ord(s[j])<>13) and (ord(s[j])<>10) and (ord(s[j])<>32) then
begin
if (j<=n) then
s[j]:=chr(ord(s[j]) xor ord(Form2.password[j]))
else
s[j]:=chr(ord(s[j]) xor ord(Form2.password[j mod n]));
end;
end;
memo2.Lines.Add(s);
end;
end;
memo1.Clear;
memo3.Clear;
end;
 
用现成的不是很好,DES啊什么的或调用MS的API
 
我是才学delphi~~老师让我们完成报文的加密与解密~
不会调用啊~~[:(]
 
你把源程序发给我,我给你做
 
你的加密算法太复杂啦:)
看你写的乱七八糟,按你的算法明文加密以后是没法解密的
你的case 0 里面的s := 。。是不是应该放在for外面?
case 1 如果明文长度没有你的memo1的长,那么按你这个方法你是没法再为他还原了,因为看你生成的memo2的内容来说是不知道你明文长度有多长的。。
你先设计好你的加密,算法都是你自己设计的,那么解迷你还不会?
//当然了,有些算法本身就是不可逆的
 
domy44 我怎么发给你啊~ 你油箱? 谢谢啊
来如风  恩 的确是写的很乱 因为赶时间又不会做所以..这个是边看书边做的 
 
不能因为赶时间而忽视了整体思路:)
在写代码之前必须要有个明确的思路,象你设计加解密的尤其要有明确的想法:)
看你代码你的加密其实就是简单对明文和密钥进行按位 xor ,
在你想法和代码基础上给你一点提示吧,谨供参考:
 
谢谢~~以后一定注意.@@
 
你的form2.password是你的密钥吧,想用他加密memo1里的内容?
如果 password的长度大于memo1的内容 那么
  对于memo1的每个字符和password的对应位置的字符进行xor,最后结果为你的密文
否则
  对于memo1的每个字符和password的对应位置的字符进行xor(password长度不足时按顺序从来再来),最后结果为你的密文
解密时方案
  如果 密文长度小于你给的密钥(就是你的password) 那么
    密文的对应位置的字符和密钥对应的字符进行xor,结果就是你原来的明文了
  否则
    密文的对应位置的字符和密钥对应的字符进行xor(密钥位置不足的时候需要mod操作,从头再来),结果就是你原来的明文了
和你的代码看好象恰恰反了,也许我看反了:)
 

Similar threads

I
回复
0
查看
741
import
I
I
回复
0
查看
539
import
I
I
回复
0
查看
570
import
I
I
回复
0
查看
617
import
I
顶部