凯撒密码(Caesar)的原理和算法实现

1.凯撒密码的原理:

它是一种古典密码体质下的一种密码,是一种移位密码,具有单表密码的性质,密文和明文都使用同一个映射,为了保证加密的可逆性,要求映射都是一一对应。

2.凯撒密码的公式:

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

解密公式: f(a)=(a+(26-N)) mod 26

其中N代表的是位移数,也可以算是k;

3.代码实现:

//
// Created by tangleia on 2020/2/21.
//
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
//加密
int kaisa_encrypt(char *text,char *result,int k)
{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'};//判断是否符合if(text == NULL || k <= 0){return -1;}int m = strlen(text); //获取明文的长度if(m <= 0){return -1;}for(int i=0;i<m;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];}return 0;
}
//解密
int kaisa_decrypt(char *text,char *result,int k)
{int p;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'};if(text == NULL || k <= 0){return -1;}int m = strlen(text);if(m <= 0){return -1;}for(int i=0;i<m;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];}return 0;
}int main()
{char text[50]="";char result[50]="";int k;int type;/**欢迎**/printf("--------欢迎使用凯撒密码-----------\n");printf("请填写明文或者密文\n");scanf("%[^\n]",text);printf("请选择加密方式,输入1加密,输入2解密\n");scanf("%d",&type);printf("请输入密钥k\n");scanf("%d",&k);if(type == 1){/***加密****/kaisa_encrypt(text,result,k);printf("明文%s的密文为:%s\n",text,result);}else if(type == 2){/***解密****/kaisa_decrypt(text,result,k);printf("密文%s的明文为:%s\n",text,result);}return 0;
}

用了c语言实现的加密解密的算法

验证

加密验证

解密验证

凯撒密码(Caesar)的原理和算法实现(C语言)相关推荐

  1. 什么是替换加密(凯撒密码)?原理是什么?

    首先了解一下什么是凯撒密码(Caesar Cipher) 凯撒密码 (英語:Caesar cipher), 或称凯撒加密.凯撒变换.变换加密,是一种最简单且最广为人知的加密技术. 凯撒密码是一种替换加 ...

  2. 凯撒密码(Caesar)

    凯撒密码(Caesar) 加密对象: 大小写字母 原理: 是一种移位加密方法,给每个字母排个索引,字母a-z索引依次为0-25 偏移量是多少就向后面移动多少 如:密文"Abc",偏 ...

  3. 凯撒(Caesar)加密解密算法C/C++实现

    任成风 2018年5月20日星期日 博客首发地址:个人博客网站 http://fairycity.wang,内容以个人博客为主,修正后的博文见个人博客,请点击访问. 本文的框架: 摘要和关键字: 1. ...

  4. 【Matlab学习】凯撒密码Caesar‘s cypher

    简介 凯撒密码是历史上已知最早的密码之一.凯撒密码中的每个字母在字母表中"移动"了一定的位置.例如,如果密码为1,则A将替换为B,B将替换为C,依此类推.相传最早是凯撒大帝用来和将 ...

  5. php实现凯撒密码加密算法,Python实现的凯撒密码算法示例

    本文实例讲述了Python实现的凯撒密码算法.分享给大家供大家参考,具体如下: 一 介绍 凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方 ...

  6. Java简易实现凯撒密码——英文句子加密

    Java简易实现凯撒密码--英文句子加密 今天要讲的是凯撒密码,它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.例如,当偏移量是3的时候,所有 ...

  7. 密码学入门1——凯撒密码和三重DES加解密

    实验目的 1.完成第一个入门加解密--凯撒密码 2.完成当下较为流行的三重DES加解密技术 3.熟悉所学的实际运用方向 实验准备 硬件:计算机或笔记本电脑 操作系统:Mac操作系统 IDE环境:Ecl ...

  8. CTF-不一样的凯撒密码

    呀呼 首先先了解一下正常的凯撒密码, 它的原理是把字母向后移位; 思路 不一样的凯撒的话就要把他们转化成ASC码来推导; 拿这次省赛的一个题目来说吧; 下载好文件 打开: bhag{asb_zsz_v ...

  9. python凯撒密码实现_密码:凯撒密码及其Python实现

    python凯撒密码实现 Before we start let's some basic terminology... 在开始之前,让我们先介绍一些基本术语... The art and scien ...

  10. JS:Caesars Cipher(凯撒密码)

    Caesars Cipher 凯撒密码 (让上帝的归上帝,凯撒的归凯撒) 下面我们来介绍风靡全球的凯撒密码Caesar cipher,又叫移位密码. 移位密码也就是密码中的字母会按照指定的数量来做移位 ...

最新文章

  1. svn清理失败且路径显示乱码
  2. class不生效 weblogic_weblogic下更改jsp不生效的解决办法
  3. ASP.NET中常用到的27个函数集
  4. Codeforces Round #327 (Div. 2) B Rebranding
  5. win7系统丢失文件的处理方法
  6. [VBA]_更改单元格背景颜色
  7. 编写一个UNIX文件系统
  8. JustAuth升级到v1.8.1版本,新增AuthState工具类,可自动生成state
  9. pc端ui图片尺寸_聊聊PC端页面适配
  10. matlab直方图均衡化代码
  11. 首都师范 博弈论 6 3 2子博弈完美均衡 蜈蚣博弈
  12. C++类的实现 奥特曼打怪兽
  13. 小程序:emoji等表情base64后乱码解决方案
  14. ofd转成html,如何把Word或者Excel文档转换为ofd格式?
  15. int 类型 转 long的坑
  16. 接口测试Jmeter
  17. Mobius 莫比乌斯
  18. gedit的安装及插件使用
  19. c语言sqlserver数据库头文件,Mysql的C语言API进行数据库编程
  20. 虚拟化服务器怎么升级,巧借虚拟化实现服务器升级改造

热门文章

  1. unity 不再渲染局部_在Unity3D中的渲染优化-减少需要处理的顶点数目
  2. Python Watchdog——监控文件系统事件
  3. VMwrare虚拟机上网
  4. 1588v2标准介绍
  5. 【Python】tkinter实现snipaste截图显示功能
  6. hadoop大数据开发技术学习笔记第三天:(前序)MySQL数据库进阶
  7. MySQL——update 语句执行流程
  8. 桌面客户端开发框架技术选型
  9. win7系统下samba服务器无法登陆,win7系统访问NAS/Samba服务器失败的解决方法
  10. java牛顿迭代法_Java牛顿迭代法