C++凯撒密码加密解密算法

时间:2024-03-18 21:47:53

一、算法描述

    凯撒密码的加密解密算法,逻辑很简单,就是两个公式:

    比如说下面这个例子的加密解密公式,就是位移量为3时的结果

    加密公式 f(a)=(a+3) mod 26

    解密公式 f(a)=(a+23) mod 26

    是不是很简单?你可能会问,什么是模运算,如何用程序语言来表达出来?

    没关系,下面会有详细的代码来说明问题。

二、具体代码

凯撒密码.c  
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include <string.h>

#define N 100
using namespace std;
//凯撒密码 
//加密公式 f(a)=(a+3) mod 26
//解密公式 f(a)=(a+23) mod 26

void psw(char *strI,int numB,int model);//加密公式函数
void unpsw(char *strI,int numB,int model);//解密公式函数
char getW(int i);//字母表

int main()
{
char str[N];
int model;
int numB;

while(1)
{
cout<<"请选择模式:\n";
cout<<"1.加密\n";
cout<<"2.解密\n";
cout<<"3.退出\n";
cin>>model;
cout<<endl;

switch(model)
{
case 1:
  cout<<"请输入要加密的字符串:";
cin>>str;
cout<<"请输入该密码算法的偏移数量:";
cin>>numB;
psw(str,numB,model);
cout<<endl;
break;
case 2:
  cout<<"请输入要解密的字符串:";
  cin>>str;
  cout<<"请输入原密码算法的偏移数量:";
  cin>>numB;
unpsw(str,numB,model);
  cout<<endl;
  break;
  case 3:
  return 0;
  break;
default:
  break;
}
}
return 0;
}

void psw(char *strI,int numB,int model)
{
if(model==1)
{
for(int i=0; i<strlen(strI); i++)
        {
            if(strI[i] >= 'A' && strI[i] <= 'Z')
            {
                strI[i] = ((strI[i]-'A')+numB)%26+'A';
            }
            else if(strI[i] >= 'a' && strI[i] <= 'z')
            {
                strI[i] = ((strI[i]-'a')+numB)%26+'a';
            }
        }
        cout<<"加密完成:"<<strI<<endl; 
}
else
{
cout<<"该模式不支持此项功能!"<<endl; 
}
}
void unpsw(char *strI,int numB,int model)
{
if(model==2)
{
int num;
num=26-numB;
for(int i=0; i<strlen(strI); i++)
        {
            if(strI[i] >= 'A' && strI[i] <= 'Z')
            {
                strI[i] = ((strI[i]-'A')+num)%26+'A';
            }
            else if(strI[i] >= 'a' && strI[i] <= 'z')
            {
                strI[i] = ((strI[i]-'a')+num)%26+'a';
            }
        }
        cout<<"解密完成:"<<strI<<endl; 
}
else
{
cout<<"该模式不支持此项功能!"<<endl; 
}
}
 
自我感觉代码的逻辑和格式,那是很好的。  

三、实验结果

废话不多说直接上图。

只要先加密,把加密后的密文反过来用解密算法解密,如果得到的明文和原来的明文是一样的。

那就基本上可以说明算法没问题。

C++凯撒密码加密解密算法

没毛病的算法。