凯撒密码算法C语言(c语言实现凯撒密码加密解密)

2023-02-22 12:31:38 摩斯密码知识 思思

C语言的凯撒密码问题?我想求教这个算法是怎么推出来的呢? 加密算法:(a[i]-a+k)%26-a

它的原理是字母与字母之间的替换。例如26个字母都向后移动K位。若K等于2,则A用C代替,B用D代替,以此类推

k是移动的位数,例如移动两位,当前字母是c,那么c-a=2,再加2,4%26=4(保证变换后的在26个字母的范围内),然后a+4即为e

凯撒密码算法C语言(c语言实现凯撒密码加密解密) 第1张

C语言的凯撒加密

/*

和楼上的相比,或许 看上去很烦

ch[i] +=5;

if (ch[i] 'Z')

{

ch[i] -= 26;

}

可以改成和 楼上的 方法

等价于 ch[i] = 'A' + (ch[i] - 'A' + 5) % 26;

*/

# include stdio.h

# include stdlib.h //用到了system(); 不写 ,可以用 getchar();

#define strwidth 117 //定义长度

int main(void)

{

char ch[strwidth];

int i ;

printf("请输入密码:");

gets(ch); //输入数据,用gets(); 保留了空格

for (i = 0; i strwidth ;i++ )

{

if (ch[i] = 'a' ch[i] = 'z' ) //判断是否小写字母

{

ch[i] +=5;

if (ch[i] 'z') //不解释,我想这样,理解可能会方便点吧

{

ch[i] -= 26;

}

}

else if ( ch[i] = 'A' ch[i] = 'Z') //判断是否大写字母

{

ch[i] +=5;

if (ch[i] 'Z')

{

ch[i] -= 26;

}

}

}

printf("加密后为:%s\n" , ch); //输出数据

system("pause");

return 0;

}

/*

或者 这样

*/

# include stdio.h

# include stdlib.h //用到了system(); 不写 ,可以用 getchar();

#define strwidth 117 //定义长度

int main(void)

{

char ch[strwidth];

int i ;

printf("请输入密码:");

gets(ch); //输入数据,用gets(); 保留了空格

for (i = 0; i strwidth ;i++ )

{

if (ch[i] = 'a' ch[i] = 'z' || ch[i] = 'A' ch[i] = 'Z' ) //判断是否是字母

{

ch[i] +=5;

if ( ch[i]'Z' ch[i] = 'Z' + 5 || ch[i] 'z' )

{

ch[i] -= 26;

}

}

}

printf("加密后为:%s\n" , ch); //输出数据

system("pause");

return 0;

}

请问一下这道C语言编程题怎么做?

按照题目要求编写的用凯撒密码加密的C语言程序如下

#includestdio.h

int main(){

char s[80];

int offset,i;

fgets(s,80,stdin);

scanf("%d",offset);

for(i=0;s[i]!='\0';i++){

if('A'=s[i] s[i]='Z')

if(offset=0)

  s[i]='A'+(s[i]-'A'+offset)%26;

else

  s[i]='A'+(s[i]-'A'+26+offset%26)%26;

else if('a'=s[i] s[i]='z')

if(offset=0)

  s[i]='a'+(s[i]-'a'+offset)%26;

else

  s[i]='a'+(s[i]-'a'+26+offset%26)%26;

}

printf("%s\n", s);

return 0;

}

凯撒密码的算法c语言的怎么实现啊?

凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全。他的原理很简单,说到底就是字母于字母之间的替换。下面让我们看一个简单的例子:“baidu”用凯撒密码法加密后字符串变为“edlgx”,它的原理是什么呢?把“baidu”中的每一个字母按字母表顺序向后移3位,所得的结果就是刚才我们所看到的密文。

#include stdio.h

main()

{

char M[100];

char C[100];

int K=3,i;

printf("请输入明文M(注意不要输入空白串)\n");

gets(M);

for(i=0;M[i]!='\0';i++)

C[i]=(M[i]-'a'+K)%26+'a';

C[i]='\0';

printf("结果是:\n%s\n",C);

}

凯撒密码,C语言,求救!

#include stdio.h

#include string.h

int main()

{

int i = 0;

int len = 0;

char ch;

char buf[256] = {0};

char nor[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 enc[26] = {'s','u','w','y','a','c','e','g','i','k','m','o','q','r','t','v','x','z','b','d','f','h','j','l','n','p'};

printf("Encode or Decode: ");

scanf("%c",ch);

printf("please input your string: ");

fflush(stdin);

gets(buf);

len = strlen(buf);

switch (ch)

{

case 'e':

case 'E':

for (i=0;ilen;i++)

{

buf[i] = enc[buf[i] - 'a'];

}

break;

case 'd':

case 'D':

for (i=0;ilen;i++)

{

buf[i] = nor[i];

}

break;

default:

printf("wrong input!\n");

}

printf("%s\n",buf);

return 0;

}