-
-
DES算法时,在置换函数中,由bit转为B时出现问题,想不通。
-
发表于:
2020-4-10 18:49
2565
-
DES算法时,在置换函数中,由bit转为B时出现问题,想不通。
求助大佬:主要想不通在由bit转成字节时出现的问题。
void Initial_Permutation_(bool* left,bool* right,char* result)//进行逆置换,并且转为字节的形式
{
int i=0;
bool temp[64];
memset(result,0,8);//对result进行初始化
memcpy(temp,left,32);
memcpy(temp+32,right,32);//将64位合并起来
/*for(i=0;i<64;i++)
{
result[i/8]|=temp[IP_[i]-1]<<(i%8);
}*/
for(i=0;i<32;i++)
result[i/8]|=temp[IP_[i]-1]<<(i%8);
for(;i<64;i++)
{
printf("i=%d\n",i%8);
printf("%d\n",result[i/8]);
printf("%d\n",(char)temp[IP_[i]-1]);
result[i/8]|=(char)(temp[IP_[i]-1])<<(i%8);
}
}//left和right都是bool类型的数组
打注释的地方是之前的代码,后来找问题分开了,发现i>32时数据就开始出错了。调试如图:
在此数据和与其一样。
到下面就不行了:
上面为零还正常,下面预期应该是2,怎么变成temp[temp[IP_[i]-1]]=1,temp[IP_[i]-1]<<1位应该是2,怎么变成-52了呢?i<32之前这都是正常的。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!