读书人

Playfire加密算法(C语言兑现)

发布时间: 2012-11-16 14:12:14 作者: rapoo

Playfire加密算法(C语言实现)

这是C语言选拔赛最后一题,题目如下:

Playfire加密算法(C语言兑现)

?

?

/* * c语言竞赛初赛本科最后一题 */#include<stdio.h>#include<string.h>//矩阵char matrix[5][5];//存储26个字母在矩阵中的行号和列号,不在矩阵中行列号均为-1int charSite[26][2];//填充matrix矩阵void init(){int i,j,k=0,len;char str[26];gets(str);len=(int)strlen(str);for(i=0;i<25;i++){if(i<len)    *(*matrix+i)=str[i];else{for(j=0;j<i;j++)if('a'+k==*(*matrix+j)){k++;j=-1;}*(*matrix+i)='a'+k;}}}//计算各个字母在矩阵中的行号和列号void calculateCharSite(){int i;for(i=0;i<26*2;i++)*(*charSite+i)=-1;for(i=0;i<25;i++){       charSite[*(*matrix+i)-'a'][0]=i/5;       charSite[*(*matrix+i)-'a'][1]=i%5;}}//加密void encrypt(char *str){    int i;char ch2,ch1,temp;int len=(int)strlen(str);    for(i=1;i<len;i+=2){//两个字母相等或其中一个字母不在矩阵中,不作改变if(str[i-1]==str[i] || charSite[str[i-1]-'a'][0]<0 ||charSite[str[i]-'a'][0]<0)continue;//在同一行或同一列,交换位置        if(charSite[str[i-1]-'a'][0] == charSite[str[i]-'a'][0] ||charSite[str[i-1]-'a'][1] == charSite[str[i]-'a'][1]){temp=str[i-1];str[i-1]=str[i];str[i]=temp;}else{//不同行,不同列,找对角矩形            ch1=matrix[charSite[str[i-1]-'a'][0]][charSite[str[i]-'a'][1]];ch2=matrix[charSite[str[i]-'a'][0]][charSite[str[i-1]-'a'][1]];str[i-1]=ch1;str[i]=ch2;}}}void main(){char str[100];init();calculateCharSite();gets(str);encrypt(str);puts(str);}

?

?

读书人网 >C语言

热点推荐