![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
c语言程序考核,急求,谢谢啊
C语言程序设计复杂程序考核函数功能:对传入的数据使用固定的Polybius方格进行三分加密,其算法参见下一页的附录。函数原型intThree_Parties(char*d...
C语言程序设计
复杂程序考核
函数功能:
对传入的数据使用固定的Polybius方格进行三分加密,其算法参见下一页的附录。
函数原型
int Three_Parties(char* data, int data_length);
参数
data 待加密数据,其长度由参数data_length指定。返回时,此数组中应该是加密后的数据。
data_length 数据长度(字节数)。
返回值
0 操作成功
1 data中包含有非字母的字符
说明
Polybius方格采用附录中举例那个。
如果data中含有小写字符,则需要转换为大写处理。
加密后的data全部为大写或者可能包含Polybius方格中的那个符号。
提示
在功能函数中,用一个二维数组来存储Polybius方格。算法上可以考虑用二维数组下标来解决问题。
附录
三分密码由Felix Delastelle发明(二分密码是二维的,用5×5(或6×6)的矩阵加密,但三分密码则用3×3×3的。它是第一个应用的三字母替换密码首先随意制造三个3×3的polybius方格替代密码,包括26个英文字母和一个符号。然后写出要加密的讯息的三维坐标。讯息和坐标四个一列排起,再顺序取横行的数字,三个一组分开,将这三个数字当成坐标,找出对应的字母,便得到密文。 展开
复杂程序考核
函数功能:
对传入的数据使用固定的Polybius方格进行三分加密,其算法参见下一页的附录。
函数原型
int Three_Parties(char* data, int data_length);
参数
data 待加密数据,其长度由参数data_length指定。返回时,此数组中应该是加密后的数据。
data_length 数据长度(字节数)。
返回值
0 操作成功
1 data中包含有非字母的字符
说明
Polybius方格采用附录中举例那个。
如果data中含有小写字符,则需要转换为大写处理。
加密后的data全部为大写或者可能包含Polybius方格中的那个符号。
提示
在功能函数中,用一个二维数组来存储Polybius方格。算法上可以考虑用二维数组下标来解决问题。
附录
三分密码由Felix Delastelle发明(二分密码是二维的,用5×5(或6×6)的矩阵加密,但三分密码则用3×3×3的。它是第一个应用的三字母替换密码首先随意制造三个3×3的polybius方格替代密码,包括26个英文字母和一个符号。然后写出要加密的讯息的三维坐标。讯息和坐标四个一列排起,再顺序取横行的数字,三个一组分开,将这三个数字当成坐标,找出对应的字母,便得到密文。 展开
展开全部
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
char polybius[3][3][3] =
{
'L','E','O', 'N','A','R', 'D','V','I',
'C','B','F', 'G','H','J', 'K','M','P',
'Q','S','T', 'U','W','X', 'Y','Z','/'
};
int get_position( char c, int *x, int *y, int *z )
{
int i,j,k;
for( i=0; i<3; i++ )
for( j=0; j<3; j++ )
for( k=0; k<3; k++ )
if ( c == polybius[j][i][k] )
{
*x = i+1, *y = j+1, *z = k+1;
return 1;
}
*x = *y = *z = -1;
return 0;
}
int three_parties( char *data, int data_length )
{
int i,j;
/**
for( i=0; i<data_length; i++ )
if ( !isalpha(data[i]) )
return 1;
***/
int *pos = (int*)malloc( 3*data_length*sizeof(int*) );
for( i=0; i<data_length; i++ )
{
int x=0,y=0,z=0;
if ( islower(data[i]) )
data[i] = toupper(data[i]);
get_position( data[i], &x, &y, &z );
pos[i] = x, pos[i+data_length]=y, pos[i+data_length*2]=z;
}
for( i=0,j=0; i<data_length*3; i+=3 )
{
if ( pos[i+1] >= 0 && pos[i] >=0 && pos[i+2]>=0 )
data[j++] = polybius[ pos[i+1]-1 ][ pos[i]-1 ][ pos[i+2]-1 ];
else
j++;
}
free( pos );
return 0;
}
int main()
{
char data[30] = "hello world";
three_parties( data, strlen(data) );
printf( "data=[%s]\n", data );
int i,j,k;
}
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询