标题:c语言题,这题怎么解释?
只看楼主
pengkepengk
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-3-5
结帖率:0
已结贴  问题点数:20 回复次数:4 
c语言题,这题怎么解释?
在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。
解密的方法就是再执行一次同样的操作。
加密过程中n位二进制数会循环使用。并且其长度也可能不是8的整数倍。
下面的代码演示了如何实现该功能。
请仔细阅读,填写空缺的代码(下划线部分)。
注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
直接写在题面中不能得分。
void f(char* buf, unsigned char* uckey, int n)
{
    int i;
    for(i=0; i<n; i++)
        buf[i] = buf[i] ^ uckey[i];
}

int main(int argc, char* argv[])
{
    char p[] = "abcd中国人123";  // 待加密串

    char* key = "11001100010001110";  //以串的形式表达的密匙,运算时要转换为按位存储的形式。

    int np = strlen(p);
    int nk = strlen(key);
    unsigned char* uckey = (unsigned char*)malloc(np);  
   
    // 密匙串需要按位的形式循环拼入 uckey中
    int i;
    for(i=0; i<np*8; i++)
    {
        if(key[i%nk]=='1')
            ____________________________________________;  // 填空16
        else
            ____________________________________________;  // 填空2

    }
   
    f(p, uckey, strlen(p));
    f(p, uckey, strlen(p));

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

    free(uckey);

    return 0;
}
横线上什么都不写输出:abcd中国人123
搜索更多相关主题的帖子: 加密 文件夹 二进制 下划线 如何 
2012-03-05 22:30
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
得分:20 
程序代码:
#define _BV(bits)                (1 << (bits))
#define raise_bits(i, bits)      ((i)|=(bits))
#define unraise_bits(i, bits)    ((i)&=~(bits))

    for (i=0; i<np*8; i++) {
        if (key[i%nk] == '1')
            raise_bits(uckey[i >> 3], _BV(i%8));
        else
            unraise_bits(uckey[i >> 3], _BV(i%8));
    }
很基础的置位清位

技术问题,请不要以短消息方式提问
2012-03-06 00:02
pengkepengk
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-3-5
得分:0 
看不懂,高手能不能讲详细点:uckey[ i/8 ] = uckey[ i/8 ] & ( 1 << ( i % 8 ) );这句什么意思?
2012-03-06 20:01
pengkepengk
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-3-5
得分:0 
回复 2楼 zaixuexi
看不懂,高手能不能讲详细点:uckey[ i/8 ] = uckey[ i/8 ] & ( 1 << ( i % 8 ) );这句什么意思?
2012-03-06 20:03
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
得分:0 
找个能看懂的解释

技术问题,请不要以短消息方式提问
2012-03-06 21:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-362305-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.641693 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved