当前位置:首页 > 技术 > 正文内容

【C语言练习_2】用C语言实现凯撒密码加密解密

Lotus2022-10-06 19:05技术

1.凯撒密码简介

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

其中:m为明文字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密文字母在字母表中对应的位置数.

2.代码

#include <stdio.h>
#include <string.h>

//加密
int encrypt(char* plaintext, char* ciphertext, int k)
{
int i, z = 0;
int l = strlen(plaintext); //获取明文的长度
for (i = 0; i < l; i++)
{
//判断大小写
if (plaintext[i] >= 'A' && plaintext[i] <= 'Z') {
ciphertext[z] = ( (plaintext[i] - 'A') + k) % 26 + 'A';
}
else if (plaintext[i] >= 'a' && plaintext[i] <= 'z') {
ciphertext[z] = ((plaintext[i] - 'a') + k) % 26 + 'a';
}
else { //判断是否是空格
ciphertext[z] = plaintext[i];
}
z++;
}
return 0;
}

//解密
int decrypt(char* plaintext, char* ciphertext, int k)
{
int i, z = 0;
int l = strlen(plaintext); //获取明文的长度
for (i = 0; i < l; i++)
{
//判断大小写
if (plaintext[i] >= 'A' && plaintext[i] <= 'Z') {
ciphertext[z] = (((plaintext[i] - 'A') - k)) % 26 + 'A';
if (((plaintext[i] - 'A') - k) < 0) {
ciphertext[z] = ciphertext[z] + 26;
}
}
else if (plaintext[i] >= 'a' && plaintext[i] <= 'z') {
ciphertext[z] = ( ((plaintext[i] - 'a') - k)) % 26 + 'a';
if (((plaintext[i] - 'a') - k) < 0) { //处理负数
ciphertext[z] = ciphertext[z] + 26;
}
}
else { //判断是否是空格
ciphertext[z] = plaintext[i];
}
z++;
}
return 0;
}

int main()
{
char plaintext[50] = "";
char ciphertext[50] = "";
int k;
int type;
printf("请填写明文或者密文:\n");
scanf("%s", plaintext);
printf("请选择加密方式,输入1加密,输入2解密\n");
scanf("%d", &type);
if (type == 1) {
//加密
printf("请输入密钥k:\n");
scanf("%d", &k);
encrypt(plaintext, ciphertext, k);
printf("明文%s的密文为:%s\n", plaintext, ciphertext);
}
else if (type == 2) {
//解密
printf("请输入密钥k:\n");
scanf("%d", &k);
decrypt(plaintext, ciphertext, k);
printf("密文%s的明文为:%s\n", plaintext, ciphertext);
}
return 0;
}

运行结果:

【C语言练习_2】用C语言实现凯撒密码加密解密_加密解密

【C语言练习_2】用C语言实现凯撒密码加密解密_移位密码_02


扫描二维码推送至手机访问。

版权声明:本文来源于网络,仅供学习,如侵权请联系站长删除。

本文链接:https://news.layui.org.cn/post/135.html

分享给朋友:

“【C语言练习_2】用C语言实现凯撒密码加密解密” 的相关文章

WinDbg Preview安装以及符号表配置

1、安装WinDbgPreview 在Microsoft Store直接搜索windbg就可以下载。 2、配置符号服务器 2.1 符号 符号是方便调试程序的文件,通常是pdb文件。一个模块(可执行程序,动态链接库)对应一个pdb文件。不同的windows版本中的文件不同(比如说kernel32),版本不同pdb符号文件也不同,因此要从微软提供的符号服务器获取本机对应的符号。 但是要在本地建立一个文...

Docker入门学习

1.运行第一个docker容器 docker run -i -t ubuntu /bin/bash 参数说明: -i, --interactive=false, 打开STDIN,用于控制台交互-t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false-d, --detach=false, 指定容器运行于前台还是后台,默认为false 首先,docker run -it...

设计模式之访问者模式

大多数情况下你不需要访问者模式,但当一旦需要访问者模式时,那就是真的需要它了,这是设计模式创始人的原话。可以看出应用场景比较少,但需要它的时候是不可或缺的,这篇文章就开始学习最后一个设计模式——访问者模式。 一、概念理解 访问者模式概念:封装作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 通俗的解释就是,系统中有一些固定结构的对象(元素),在其...

【微信小程序】小程序的宿主环境

????系列专栏:微信小程序 ????欢迎关注????点赞????收藏⭐留言???? ✅个人主页:​​hacker_demo的51CTO博客​​ ????个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生,我自己书写,余生很长,请多关照,我的人生,敬请期待???????????? 宿主环境简介 宿主环境(host environ...

C++浅拷贝深拷贝

1. C++ 浅拷贝 什么是浅拷贝? 一般比较形象的理解,浅拷贝可以理解"值"层面的拷贝,深拷贝可以理解成"内存"上的拷贝,特别是类里面含有指针类型的。 // .h文件class HasPtrMem{public:HasPtrMem();HasPtrMem(const HasPtrMem& h);~HasPtrMem();void print();int *p;};// .cpp 文件H...

Python基础(十) | Numpy详细教程

第十一章 Numpy库 ⭐本专栏旨在对Python的基础语法进行详解,精炼地总结语法中的重点,详解难点,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握python编程,同时为后续的数据分析,机器学习及深度学习的代码能力打下坚实的基础。 ????本文已收录于Python基础系列专栏: Python基础系列教程 欢迎订阅,持续更新。 10.1 为什么要用Numpy 10.1.1  ...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。