https://mp.weixin.qq.com/s/oKBSFTJK3f_l_h848vZChw
思考了很久,无果,昨天看微信文章
下图是知识点一 本文无关
下图给我启发
回归代码看:BitIP就是 其实置换表!!!!!!BitCP就是终结置换表!!!!!!!
const unsigned char BitIP[64] =
{ 25, 17, 54, 33, 9, 38, 34, 1,
11, 48, 29, 56, 27, 50, 51, 40,
19, 58, 21, 5, 44, 31, 45, 7,
61, 47, 13, 57, 23, 15, 53, 46,
24, 16, 8, 39, 0, 26, 18, 10,
2, 49, 12, 4, 36, 30, 14, 6,
41, 59, 63, 22, 62, 32, 37, 42,
28, 20, 43, 52, 3, 35, 60, 55 };
const unsigned char BitCP[64] =
{ 36, 7, 40, 60, 43, 19, 47, 23,
34, 4, 39, 8, 42, 26, 46, 29,
33, 1, 38, 16, 57, 18, 51, 28,
32, 0, 37, 12, 56, 10, 45, 21,
53, 3, 6, 61, 44, 54, 5, 35,
15, 48, 55, 58, 20, 22, 31, 25,
9, 41, 13, 14, 59, 30, 2, 63,
11, 27, 17, 49, 62, 24, 52, 50 };
在成对的函数 一个就是加密 一个就是解密啦
void initPermutation(unsigned char* inData)
{
unsigned char newData[8]={0,0,0,0,0,0,0,0};
int i;
for(i=0;i<64;i++)
{
if((inData[BitIP[i]>>3]&(1<<(7-(BitIP[i]&7))))!=0)
newData[i>>3]=newData[i>>3]|(1<<(7-(i&7)));
}
for(i=0;i<8;i++)
{
inData[i]=newData[i];
}
}
void conversePermutation(unsigned char* inData)
{
unsigned char newData[8]={0,0,0,0,0,0,0,0};
int i;
for(i=0;i<64;i++)
{
if( ( inData[BitCP[i]>>3] & (1<<(7-(BitCP[i]&7))) )!=0 )
newData[i>>3]=newData[i>>3]|(1<<(7-(i&7)));
}
for(i=0;i<8;i++)
{
inData[i]=newData[i];
}
}
unsigned char str[8]={0xF6,0x56,0x21,0x33,0x9E,0x25,0x29,0xD3};
int main(void)
{
int i;
for(i=0;i<8;i++) printf("%02X ",str[i]); printf("\n");
initPermutation(str);
for(i=0;i<8;i++) printf("%02X ",str[i]); printf("\n");
conversePermutation(str);
for(i=0;i<8;i++) printf("%02X ",str[i]); printf("\n");
return 0;
}
测试一下 神奇事情发生了吧
F6 56 21 33 9E 25 29 D3
0D 9C 16 78 0E 8F 6F 1D
F6 56 21 33 9E 25 29 D3
[Finished in 4.5s]