1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C语言实现凯撒密码加解密

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

时间:2021-06-11 17:50:39

相关推荐

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

凯撒密码

加密即把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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。