⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainuint.pas

📁 这是一个dephi开发的古典加密演示程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      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 + -