c语言摩斯密码,用C语言设计一个加密 解密 密码 的程序。

2023-03-29 16:19:49 秘籍 思思

c语言能解莫斯密码吗

能。根据查询相关公开信息显示,C语言能转换摩斯密码。C语言是一门通用计算机编程语言,广泛应用于底层开发。

用C语言设计一个加密 解密 密码 的程序。

// playFair 加密 你参考下 ...

#include"stdio.h"

#include"string.h"

#include"stdlib.h"

#define x 50

char MiYao[x],PassWord[x],AddPass[x],Table[5][5],Map[25];

bool Visit[27]={false};

char English[27]="abcdefghijklmnopqrstuvwxyz";

void Input()

{

printf("请输入密钥:\t"); scanf("%s",MiYao);

printf("请输入待加密密码:\t"); scanf("%s",PassWord);

}

void Fun_5x5()

{

int count = 0,V =0;

/*标记密钥内字符为: true*/

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

if(strchr(English,MiYao[i])!=NULL)

Visit[strchr(English,MiYao[i])-English] = true;

/*执行密钥矩阵操作 并标记已使用字符:true*/

for(int i=0;i5;i++)

for(int j=0;j5;j++)

{

if(countstrlen(MiYao))

Table[i][j] = MiYao[count++];

else

{

while(Visit[V] != false) V++;

Table[i][j] = English[V];

Visit[V++] = true;

}

}

puts("∞∞∞密钥矩阵为∞∞∞");

for(int i=0;i5;i++)

{ for(int j=0;j5;j++)

printf("%3c",Table[i][j]);

puts("");

}

puts("∞∞∞∞∞∞∞∞∞∞∞");

}

int IsVisited(char ch)

{

return Visit[strchr(English,ch)-English]; //false 未出现过

}

void TabletoMap()

{ int count=0;

for(int i=0;i5;i++)

for(int j=0;j5;j++)

Map[count++]=Table[i][j];

Map[count]='\0';

}

void Judge()

{

int len = strlen(PassWord),i,j,k;

memset(AddPass,0,sizeof(char));

/*一对对去字母,剩下单个字母,则不变化,直接放入加密串中.*/

if(len%2){

AddPass[len-1] = PassWord[len-1];

len -=1;

}

/*一对中 密钥矩阵中 存在矩阵 eg.ab 先输出a同行顶点在输出b同行顶点*/

int row1,low1,row2,low2,a1,a2;

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

{

char c1,c2;

c1 = PassWord[i];

c2 = PassWord[i+1];

/*一对中 两字母相同 无变化*/

/*一对中 有字母不在密钥矩阵中 无变化*/

if(c1 == c2 || ( !IsVisited(c1)||!IsVisited(c2)))

{ AddPass[i] = c1;

AddPass[i+1]=c2;

}else{

a1 = strchr(Map,c1)-Map;

row1 = a1/5; low1 = a1%5;

a2 = strchr(Map,c2)-Map;

row2 = a2/5; low2 = a2%5;

/*一对中 字符出现在同行或同列 简单swap字符*/

if(row1 == row2 || low1 == low2)

{

AddPass[i] = c2;

AddPass[i+1] = c1;

}else{

AddPass[i] = Table[row1][low2];

AddPass[i+1] = Table[row2][low1];

}

}

}AddPass[len+1]='\0';

puts("加密后字符串:");

puts(AddPass);

puts("原串是:");

puts(PassWord);

}

int main()

{

Input();

Fun_5x5();

TabletoMap();

Judge();

return 0;

}

c语言 摩斯密码问题 在线等,急

az[26[5] 是编码表,你要校对一下,我只是快速拍入,给你示意。

程序第一部分是 英文到莫码输出。英文只考虑了小写。

(大写转小写你可以用 -'A'+'a', 下标为

printf("%s",az[s1[0]-'A']);

for (i=1;iL;i++) printf("|%s",az[s1[i]-'A']);

)

程序第2部分是莫码到英文小写。

#include stdio.h

#include stdlib.h

char az[26][5]={

"*-","-***","-*-*","-**",

"*","**-*","--*","****",

"**","*---","-*-*","*-**",

"--","-*","---","*--*",

"--*-","*-*","***","-",

"**-","***-","*--","-**-",

"-*--","--**"};

char toA(char *s){

int i;

for (i=0;i26;i++) if (strcmp(az[i][0],s)==0) return i+'a';

printf("wrong input code: %s\n",s);

}

int main(){

char s1[80]="moses";

char s2[80];

int i,j,L;

L=strlen(s1);

printf("%s",az[s1[0]-'a']);

for (i=1;iL;i++) printf("|%s",az[s1[i]-'a']);

printf("\n");

// Part2:

printf("please input ****|*|*-**|*-**|---\n");

scanf("%[^|]",s1);

printf("%c",toA(s1));

while (scanf("|%[^|,'\n']",s1)==1) {

printf("%c",toA(s1));

}

}