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个英文字母和一个符号。然后写出要加密的讯息的三维坐标。讯息和坐标四个一列排起,再顺序取横行的数字,三个一组分开,将这三个数字当成坐标,找出对应的字母,便得到密文。
展开
 我来答
sunnyhouyq
2014-05-27 · TA获得超过649个赞
知道小有建树答主
回答量:515
采纳率:100%
帮助的人:528万
展开全部
#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;
}
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式