天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 64|回复: 0

凯撒加密算法

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
#include<iostream>
#include<cstring>/*文件cstring,和string.h对应,c++版本的头文件,
包含比如strcpy之类的字符串处理函数*/
#include<string>
using namespace std;
int main()
{
        cout<<"\n";
        cout<<"-----------------凯撒加密算法---------------"<<endl<<endl;
        char a[26];
        int i;
        for(i=0;i<26;i++)
        {
                a[i]=char(65+i);/*强制类型转换,因为a是字符型,所以这句话的意思就是将数组a从0开始赋值,
                而且是赋特定的值,如a[0]是A依次下去,一直有26个; */
        }
        cout<<"密码表为:"<<endl;
        for(i=0;i<26;i++)
        {
                cout<<i<<"-------------------"<<a[i]<<'\t';
                //对应的输出密码表,a[0]和A对应依次;
        }
        cout<<endl;//上面是对密码表的定义;
        char plain[64],cipher[64];//明文、密文字符串;
        //加密阶段;
        cout<<"\n* * *加密* * *\n"<<endl;
        while(1)
        {
                cout<<"请输入明文(明文需用连续的大写字母):"<<"\n";
                cin>>plain;//输入明文字符串;
                for(i=0;i<strlen(plain);i++)//如果输入的明文字符大于Z或者小于A或加密完了则退出循环;  
                {
                        if(plain[i]<'A'||plain[i]>'Z')
                        break;
                 }
                 if(i>=strlen(plain))
                 break;
         }
         cout<<"您输入的明文为:"<<plain<<endl;//铭文的输入;
         int key;
         cout<<"请您输入您的钥匙(必须是整数):";
         cin>>key;
         cout<<"您输入的钥匙为:"<<key<<endl;
         cout<<"所得的凯撒密码为:";
         for(i=0;i<strlen(plain);i++)
         {
                 int c,j;
                 c=int(plain[i]);//强制类型转换,将字符转换成整数,即ascII码值;
                j=((c-65)+key)%26;//进行加密;
                cipher[i]=a[j];//将密文进行赋值;赋值的为经过加密后的值;
                //这个加密就是把明文的ascII码值进行运算之后的值赋给另一个数组;
         }
         cipher[i]=0;//最后一个赋值为0,不然会出现乱码;
         cout<<cipher;//输出密文;
     cout<<endl;
     //解密阶段;
         cout<<"\n* * *解密* * *\n "<<endl;
         cout<<"请输入您的凯撒密码(需用大写连续英文字母):";
         cin>>cipher;
         cout<<"您输入的凯撒密码为:"<<cipher<<endl;
         cout<<"请输入您的钥匙(必须为整数):";
         cin>>key;
         cout<<"您输入的钥匙为:"<<key<<endl;
         cout<<"解密后的明文为:";
         for(i=0;i<strlen(cipher);i++)
         {
                 int c,j;
                 c=int(cipher[i]);
                 j=((c-65)-key+26)%26;
                 plain[i]=a[j];
         }
         plain[i]=0;
         cout<<plain;
         cout<<endl;
  return 0;
}

 

 

 

 

凯撒加密算法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 12:40 , Processed in 0.195824 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表