在Bitshift和OR操作之后检索原始位

时间:2015-10-23 18:43:10

标签: c

我有2个例程,其中一个发送加密数据,另一个解密。我不确定解析加密字段的正确方法。

void send_the_encrypt_code ( UINT32 field, UINT32 index )
{
   UINT32 encrypt_code = ( field << 5 | index );
   pass_the_encrypt_code ( encrypt_code );
}

void pass_the_encrypt_code ( UINT32 encrypt_code )
{
  UINT32 field ;
  UINT32 index;

 /* How do I parse the field and index values from the encrypt_code and assign to the local variables field and index in this routine */??

}

提前致谢。

1 个答案:

答案 0 :(得分:1)

嗯,正如我在评论中所说的那样,我认为不可能恢复这种转变......

如果您只需打包并隐藏字段,您可以连接数据并应用简单的XOR编码......

这样的事情对你有用吗?

请注意,您不能将打包数据存储在与原始数据大小相同的容器中,因此不能存储char *。

char key[] = {'P','A','S','S','K','E','Y','1'};

void decrypt ( char * encrypted){
   UINT32 field, index;
   UINT32 xor_field, xor_index;

   memcpy(&xor_field,&encrypted[0],sizeof(xor_field));
   memcpy(&xor_index,&encrypted[4],sizeof(xor_index));

   memcpy(&field,&key[0],sizeof(field));
   memcpy(&index,&key[4],sizeof(index));

   field ^= xor_field;
   index ^= xor_index;
}

void encrypt ( UINT32 field, UINT32 index ){
   char encrypted[8];
   UINT32 xor_field, xor_index;

   memcpy(&xor_field,&key[0],sizeof(xor_field));
   xor_field ^= field;
   memcpy(&xor_index,&key[4],sizeof(xor_field));
   xor_index ^= index;

   memcpy(&encrypted[0],&xor_field,sizeof(xor_field));
   memcpy(&encrypted[4],&xor_index,sizeof(xor_index));

   decrypt(encrypted);
}