📄 mainuint.pas
字号:
if ((c[i]>='A')and (c[i]<='Z')) then
begin
iasc:=ord(c[i])-strtoint(form1.ComboBox1.Text);
if (iasc<ord('A')) then //如果相减后结果小于A,则
iasc:=iasc+26; //ASCII码加26
uncode:=uncode+chr(iasc);
end else
if ((c[i]>='a')and (c[i]<='z')) then
begin
iasc:=ord(c[i])-strtoint(form1.ComboBox1.Text);
if (iasc<ord('a')) then
iasc:=iasc+26;
uncode:=uncode+chr(iasc);
end
else
uncode:=uncode+c[i];
end;
edit3.Text:=uncode;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
edit1.Text :='';
edit2.Text :='';
edit3.Text :='';
end;
procedure TForm1.Button4Click(Sender: TObject);//置换加密
var
a,c,d:string;
len1,len2,i,j,k,yu,duan:integer;
m:array[1..5] of string;
begin
edit5.Text:='';
edit6.Text:='';
len1:=length(edit4.Text);
c:=edit4.Text;
a:='';
begin
for i:=1 to len1 do //去处输入的空格
if c[i]<>' ' then
a:=a+c[i];
end;
len2:=length(a);
duan:=len2 div 5; //输入的内容5个一组分组
yu:=len2 mod 5;
for k:=1 to (5-yu) do //余下不足5的用空格补足
a:=a+' ';
for j:=0 to duan do //进行每位的转换
begin
d:=Copy(a,j*5+1,5);
m[1]:=copy(d,4,1);
m[2]:=copy(d,1,1);
m[3]:=copy(d,5,1);
m[4]:=copy(d,3,1);
m[5]:=copy(d,2,1);
edit5.Text:=edit5.Text+m[1]+m[2]+m[3]+m[4]+m[5];
end;
end;
procedure TForm1.Button5Click(Sender: TObject);//置换解密
var
a,d:string;
len2,j,duan:integer;
m:array[1..5] of string;
begin
edit6.Text:='';
a:=edit5.Text;
len2:=length(a);
duan:=len2 div 5;
for j:=0 to duan do
begin
d:=Copy(a,j*5+1,5);
m[1]:=copy(d,2,1);
m[2]:=copy(d,5,1);
m[3]:=copy(d,4,1);
m[4]:=copy(d,1,1);
m[5]:=copy(d,3,1);
edit6.Text:=edit6.Text+m[1]+m[2]+m[3]+m[4]+m[5];
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
edit4.Text:='';
edit5.Text:='';
edit6.Text:='';
end;
procedure TForm1.Edit10Change(Sender: TObject);
var
i:integer;
begin //只允许输入字母
for i:=1 to length(edit10.Text) do
if edit10.Text[i] in ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']then
else
begin
application.MessageBox('请输入字母','提示',0);
keybd_event(VK_BACK, 0, 0, 0);
keybd_event(VK_BACK, 0, KEYEVENTF_KEYUP, 0);
end;
label13.Caption:=inttostr(length(edit10.Text));
end;
procedure TForm1.Button7Click(Sender: TObject);//维吉尼亚加密
var
a,b,c,d:string;
k,len1,len2,len3,i,j,l,n,duan,yu:integer;
begin
edit8.Text:='';
edit9.Text:='';
a:=edit7.Text;
len1:=length(a);
b:='';
for i:=1 to len1 do
if a[i]<>' ' then
b:=b+LowerCase(a[i]); //取出输入的内容,并把输入的字母变为小写
len2:=length(b);
c:=trim(LowerCase(edit10.Text)); //取出输入的密钥
k:=strtoint(trim(label13.Caption)); //得到密钥的长度
yu:=len2 mod k; //按密钥长度分段,得到余数
if yu<>0 then //判断如果有余数,则用“x”补齐
begin
ylen:=k-yu; //记下总共补了多少个”x”
for n:=1 to (k-yu) do
b:=b+'x';
end;
d:=b;
len3:=length(d);
duan:=len3 div k; //把补齐后的字符按密钥长度分段
for l:=1 to duan do //以分段作为外循环
for j:=1 to k do //以密钥长度为内循环
begin
edit8.Text:=edit8.Text+ FZ[c[j],d[j]]; //通过矩阵得到密文
if j=k then //如果内循环结束
d:=copy(d,k+1,len3-k); //去掉加密过的字符,得到新的字符串继续循环加密
end;
end;
procedure TForm1.Button10Click(Sender: TObject);
begin
form2.Show; //维吉尼亚密码代换方阵图
end;
procedure TForm1.Button8Click(Sender: TObject);//维吉尼亚解密
var
a,b,c:string;
k,len1,j,l,duan:integer;
i:char;
begin
a:=LowerCase(edit8.Text);
len1:=length(a);
b:='';
c:=trim(LowerCase(edit10.Text));
k:=strtoint(trim(label13.Caption));
duan:=len1 div k;
for l:=1 to duan do
for j:=1 to k do
begin //新建循环i,通过一一比较找到明文
for i:='a' to 'z' do
if FZ[c[j],i]=Upcase(a[j]) then //矩阵FZ中一定会有一个值等于密文
b:=b+i; //用循环找到矩阵的下标,即明文
if j=k then
a:=copy(a,k+1,len1-k);
end;
edit9.Text:=LowerCase(copy(b,1,len1-ylen)); //去掉添加的‘x’,得到明文
end; //解密结束
procedure TForm1.Button9Click(Sender: TObject);
begin
edit7.Text:='';
edit8.Text:='';
edit9.Text:='';
edit10.Text:='';
end;
procedure TForm1.Edit7Change(Sender: TObject);
var
i:integer;
begin
for i:=1 to length(edit7.Text) do
if edit7.Text[i] in [' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']then
else
begin
application.MessageBox('请输入字母','提示',0);
keybd_event(VK_BACK, 0, 0, 0);
keybd_event(VK_BACK, 0, KEYEVENTF_KEYUP, 0);
end;
end;
procedure TForm1.Button11Click(Sender: TObject); //乘法加密
var
a,b,c:string;
len1,len2,k,i,j:integer;
begin
a:=edit11.Text;
b:='';
c:='';
edit12.Text:='';
k:=strtoint(ComboBox2.Text);
len1:=length(a);
for i:=1 to len1 do
if a[i]<>' ' then
b:=b+LowerCase(a[i]);
len2:=Length(b);
for j:=1 to len2 do
c:=c+JIAMI(b[j],k); //调用JIAMI函数来进行加密
edit12.Text:=c;
end;
procedure TForm1.Button12Click(Sender: TObject); //乘法解密
var
a,b:string;
len,i,j,k:integer;
x:char;
begin
a:=Edit12.Text;
edit13.Text:='';
b:='';
len:=Length(a);
k:=strtoint(ComboBox2.Text);
for i:=1 to len do
for x:='a' to 'z' do //由于不会写解密函数,就用一个'a' to 'z'的循环来
if JIAMI(x,k)= a[i] then //挨个加密和密文比较,如果相同,则找到明文
begin
b:=b+x;
end;
edit13.Text:=LowerCase(b);
end;
procedure TForm1.Edit11Change(Sender: TObject);
var
i:integer;
begin
for i:=1 to length(edit11.Text) do
if edit11.Text[i] in [' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']then
else
begin
application.MessageBox('请输入字母','提示',0);
keybd_event(VK_BACK, 0, 0, 0);
keybd_event(VK_BACK, 0, KEYEVENTF_KEYUP, 0);
end;
end;
procedure TForm1.Button13Click(Sender: TObject);
begin
edit11.Text:='';
edit12.Text:='';
edit13.Text:='';
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -