C语言实现凯撒密码加解密

news/2024/11/8 0:32:00/

凯撒密码

  • 加密即把a-z或A-Z的字母向后移动n个字符实现加密,若n=3的话,a对应d,z对应c,如此循环;
  • 解密刚好和加密相反,加密向后移动的话解密就向前移动。
    加密的C代码如下:
#include <stdio.h>
void encode(char str[],int n)
{//使用两个数组分别存放大小写字符char min[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 max[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'};int i,k,m; for(i=0;str[i]!='\0';i++)//判空条件也可以使用strlen(str)来获取str长度实现 {if('a'<=str[i] && str[i]<='z'){k=str[i]-'a';//使用k来获得当前字符对于字符a的偏离程度。若当前字符为a,则k=0,刚好符合字符数组min的下标m=(26+k+n)%26;//使用m来保存移动后的字符,对26取余数保证m始终位于0至25之间。若n为复数的话k+n可能小于0,因此在前面加上26保证其为正数。str[i]=min[m];}	else if('A'<=str[i] && str[i]<='Z'){k=str[i]-'A';m=(26+k+n)%26;str[i]=max[m];}		}		
}int main()
{char a[10],ch;int n;printf("输入n值:");scanf("%d",&n);ch=getchar();printf("\n输入原始字符串:");gets(a);encode(a,n);printf("\n转换后:");puts(a);return 0;
}

解密的C代码如下:

#include <stdio.h>
void decode(char str[],int n)
{//使用两个数组分别存放大小写字符char min[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 max[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'};int i,k,m; for(i=0;str[i]!='\0';i++)//判空条件也可以使用strlen(str)来获取str长度实现 {if('a'<=str[i] && str[i]<='z'){k=str[i]-'a';//使用k来获得当前字符对于字符a的偏离程度。若当前字符为a,则k=0,刚好符合字符数组min的下标m=(26+k-n)%26;//使用m来保存移动后的字符,由于k-n可能为负数因此在前面加上26保证其为正数。str[i]=min[m];}	else if('A'<=str[i] && str[i]<='Z'){k=str[i]-'A';m=(26+k-n)%26;str[i]=max[m];}		}		
}
int main()
{char a[10],ch;int n;printf("输入n值:");scanf("%d",&n);ch=getchar();printf("\n输入原始字符串:");gets(a);decode(a,n);printf("\n转换后:");puts(a);return 0;
}

http://www.ppmy.cn/news/839570.html

相关文章

ctf密码学加解密

base编码&#xff1a; 在字符串后看到&#xff1a;&#xff0c;很可能是base64编码 编码格式base16大写字母A-F和0-9base32大写字母A-Z和数字2-7base58大小写字母和数字去除0(零)和O(大写o)、I(大写i)和l(小写L)base64大小写字母和数字0-9以及"" "/"base…

凯撒密码加解密实现(python)

Caesar&#xff08;凯撒密码&#xff09; 原理 凯撒密码&#xff08;Caesar&#xff09;加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后&#xff08;或向前&#xff09;移动固定数目&#xff08;循环移动&#xff09;作为密文。例如&#xff0c;当偏移量是左移 3…

维吉尼亚密码加解密

西安电子科技大学Python程序设计上机实验——维吉尼亚密码加解密 维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法&#xff0c;属于多表密码的一种简单形式。为了生成密码&#xff0c;需要使用表格法。这一表格包括了 26 行字母表&#xff0c;每一行都由前一行向左…

加密解密

//加密解密 public class GF_Encrypt { /// <summary> /// DES加密 /// </summary> /// <param name"pToEncrypt">加密字符串</param> /// <param name"sKey">密钥</param> /// <returns></returns> publ…

仿射密码解密(Affine Cipher)

仿射密码是一种表单代换密码&#xff0c;字母表的每个字母相应的值使用一个简单的数学函数对应一个数值&#xff0c;再把对应数值转换成字母。 ABCDEFGHIJKLMNOPQRSTUVWXYZ012345678910111213141516171819202122232425 加密函数&#xff1a;E(x) (ax b) (mod m)&#xff0c…

古典密码----仿射密码加解密

理论部分 仿射密码是移位密码的一个推广&#xff0c;其加密过程不仅包含移位操作&#xff0c;而且使用了乘法运算。与移位密码相同&#xff0c;仿射密码的明文空间M和密文空间C均为Z26&#xff0c;因此&#xff0c;在使用仿射密码体制对英文消息进行加密之前&#xff0c;需要在…

密码加解密java语言实现

目录 前言 1.密码加密的主要方式 2.代码的实现过程 3.整体代码 前言 随着技术的发展&#xff0c;密码加密技术已经越来越普遍越来越多样化&#xff0c;在我们生活中常见的加密算法包括了DES加密算法,AES加密算法,RSA加密算法,MD5加密算法等等。密码加密在我们国家社会生活中…

数据库密码加解密

为符合数据安全&#xff0c;针对数据库密码进行加密以防止数据库密码明文展示而引发的安全隐患。 一、数据库密码加密&#xff1a; 加密Jar包&#xff1a; 数据库密码加密Jar包-Java文档类资源-CSDN下载 使用详解&#xff08;环境为JDK1.7&#xff09;&#xff1a; 1.通过…