一、算法描述

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

比如说下面这个例子的加密解密公式,就是位移量为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++凯撒密码加密解密算法相关推荐

  1. C++实现古典密码-凯撒密码加密解密算法

    文章目录 第一部分 Caesar密码简介 1.1 基本思想 1.2 历史沿革 第二部分 Caesar密码的C++实现 第一部分 Caesar密码简介 1.1 基本思想 在密码学中,恺撒密码(英语:Ca ...

  2. 凯撒密码加密解密C语言详细代码

    凯撒密码加密解密C语言详细代码 凯撒密码 又叫循环移位密码.它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代.它的加密过程可以表示为下面的函数: E(m)=(m+k) mod ...

  3. 凯撒密码加密解密——Java代码(密码学)

    凯撒密码加密解密--Java代码(密码学) 凯撒密码: 恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文 ...

  4. Python编程:实现凯撒密码加密解密

    凯撒密码 原理: 通过把字母移动一定的位数来实现加解密 明文中的所有字母从字母表向后(或向前)按照一个固定步长进行偏移后被替换成密文. 例如: 当步长为3时,A被替换成D,B被替换成E,依此类推,X替 ...

  5. Matlab凯撒密码加密解密

    Pratice problem: Bob wants to send the message "Start sending messages at 8:30" to Alice i ...

  6. 2.凯撒密码加密解密(C)

    明文空间M.密文空间C都是和密钥空间K满足,M=C=K={0,1,2,-,25}=Z_26 ,即把26个英文字母与整数0,1,2,-,25一一对应. 加密变换,E={E:Z26→Z26, Ek (m) ...

  7. python凯撒密码加密写入文件_Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作...

    #-*- coding: gb2312 -*-#用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作#作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/k ...

  8. 凯撒密码加密、解密、暴力破解(C语言实现)

    C语言设计,替换密码开发设计,2022年9月信息安全课程作业分享 #include<stdio.h> #include<string.h> #include<stdlib ...

  9. 5.3使用凯撒密码加密和解密英文文件python

    1本关任务:使用凯撒密码加密和解密英文文件.具体要求如下: (1)接收一个字符串为参数,如果参数值为加密,要求用户输入一个要加密的文件名,再输入一个单词做为密钥发生器,用于计算偏移量,对文件中的内容进 ...

最新文章

  1. 学了那么多年设计模式依然不会用!那可真蠢!
  2. 因买不到RTX 3090,小哥自己搭建了一个专业级机器学习工作站
  3. 机器学习领域最新十篇论文,来自谷歌、Facebook、普林斯顿大学、斯坦福大学等团队的最新研究成果...
  4. [K/3Cloud]如何解决kdpkg无法部署到业务站点的问题
  5. Flask jQuery ajax
  6. php登入模块代码,thinkphp LoginAction.class.php 登录模块
  7. python第二天3.1
  8. 【优化算法】多目标水母搜索优化算法 (MOJS) 【含Matlab源码 248期】
  9. 华为荣耀10电路原理图
  10. LaTeX tabular表格环境与命令
  11. Centos7解压Zip文件
  12. php是哪种币,php有哪些【货币问答】- php有哪些所有答案 - 联合货币
  13. 经典算法大全之费式数列
  14. CS5211 eDP转LVDS转换器芯片 CS5211芯片说明书
  15. 【通俗易懂的通信】马尔可夫过Ⅲ:马尔可夫链的极限性态与平稳分布
  16. 【51单片机】十分钟学会定时器中断¹
  17. linux下下载fnl数据,python处理FNL数据的grib文件和nc文件(纬度存储的问题)
  18. Office 2016 系列 VOL版本下载
  19. 2021SC@SDUSC HBase(十三)项目代码分析——WAL写入
  20. 2015/10/17偶得

热门文章

  1. idea 创建maven项目报错: Failed to create parent directories for tracking file
  2. SpringBoot整合的Mybatis出现的问题:org.springframework.beans.factory.NoSuchBeanDefinitionException:
  3. STM32冷启动下载
  4. 代码审查插件:Devart Review Assistant Crack
  5. Beego框架:博客后台登录,用户,说说等功能实现
  6. Node.js学习笔记(七)#Express框架
  7. Golang能取代Java吗_为什么Golang能从Java和C++嘴里抢来一块蛋糕
  8. 附注:友链检测限制检测前100条数据
  9. 运营狗的自述:99%的新手都要经历的5个大坑!
  10. 2021,noip考点总结,加油