终于获得答案--终极解密

 

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]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值