明文空间M、密文空间C都是和密钥空间K满足,M=C=K={0,1,2,…,25}=Z_26 ,即把26个英文字母与整数0,1,2,…,25一一对应。
加密变换,E={E:Z26→Z26, Ek (m) = m + k (mod26)| m∈M, k∈K }
解密变换,D={D:Z26→Z26, Dk © = c-k (mod26)| c∈C, k∈K }
解密后再把Z26中的元素转换英文字母。

密文 = 明文 + key(mod26) 【把明文字母依次向后移k位,其中k小于26】

当密钥k=3时,就是历史上著名的凯撒密码(Caesar)

C语言代码如下:

#include <stdio.h>
#include <stdlib.h>
int main (){char small_letter[26]={'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'};char big_letter[26]={'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'};char text[1000],result[1000];int c,count=0,k,p;int c1,p1;char function;printf("Insert Message:");c=getchar();c1=c;while(1) //读取字符串{if(c == '\n') break;text[count]=c;printf("%c",text[count]);count++;c=getchar();}printf("\n");printf("Please select E encryption or D decryption:");scanf("%c",&function);if (function == 'E'){printf("Insert Key :" );scanf("%d",&k);for(int i=0;i<count;i++){if(text[i]>='A'&&text[i]<='Z'){result[i]=big_letter[((text[i]-'A')+k)%26];}//找出加密后字符在字符数组里的对应位置else if (text[i]>='a'&&text[i]<='z'){result[i]=small_letter[((text[i]-'a')+k)%26];}else result[i]=text[i];printf("%c",result[i]);}}else if(function == 'D') {printf("Insert Key :" );scanf("%d",&k);for(int i=0;i<count;i++){if(text[i]>='A'&&text[i]<='Z'){p=((text[i]-'A')-k);while(p<0)p+=26;result[i]=big_letter[p];}//找出解密后字符在字符数组里的对应位置,注意不要让它超出范围(下表位置为负数)else if (text[i]>='a'&&text[i]<='z'){p=((text[i]-'a')-k);while(p<0)p+=26;result[i]=small_letter[p];}else result[i]=text[i];printf("%c",result[i]);}printf("\n");}return 0;
}

运行结果:

2.凯撒密码加密解密(C)相关推荐

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

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

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

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

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

    一.算法描述 凯撒密码的加密解密算法,逻辑很简单,就是两个公式: 比如说下面这个例子的加密解密公式,就是位移量为3时的结果 加密公式 f(a)=(a+3) mod 26 解密公式 f(a)=(a+23 ...

  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. C++实现古典密码-凯撒密码加密解密算法

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

  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. 【青少年编程】【蓝桥杯】绘制扇子
  3. VMware Fusion指定虚拟机IP
  4. Windows Server 2016-Netdom Join加域并指定OU (一)
  5. centos 安装搜狗输入法_Ubuntu 20.04 安装搜狗输入法
  6. linux系统运维面试题
  7. C语言API编写窗体界面和按钮
  8. MyEclipse启动tomcat出现java.lang.OutOfMemoryError: PermGen space 的解决方案
  9. mysql 触发器 定时触发_mysql 触发器和存储过程组合使用,实现定时触发操作
  10. centos7当中的systemd及systemctl(节选)
  11. try catch无法捕获 StackOverflowException
  12. AI进军华尔街!《终极算法》作者Domingos加盟对冲基金巨头
  13. 获取时间戳及转化为yyyyMMdd格式的时间
  14. Vyos防火墙功能配置
  15. 加速 Android 开发的五大开源网站
  16. python打开ie浏览器_python+selenium启动IE浏览器
  17. MycoLightTM 比率细菌膜电位试剂盒程序
  18. 使用hexo基于cactus仙人掌主题最全美化客制教程
  19. python 拆包_python3拆包详解
  20. c++传输二进制数据

热门文章

  1. 【深度学习】新垣结衣夫妇的孩子长啥样,用 BabyGAN 预测试试
  2. 数字图像处理--图像测量
  3. US Domain Center VPS 主机
  4. 潜意识的力量 (六)
  5. 2021年项城一高理科高考成绩查询,项城一高举行2021年高考壮行大会
  6. 学习计算机一个很好的免费资料下载网站地址(大家学习网论坛)
  7. Oracle高人写的Oracle运行原理性文章(zt)
  8. 抖音没有播放量是什么原因,抖音播放量为0怎么解决?
  9. 景区旅游多商户版v18.6.9
  10. Java用栈简单实现迷宫