-3

暗号化/復号化システム (プロトタイプ) を作成します。このシステムには 188 バイトのパケットがあります。そしてスクランブリング:

暗号化 (Python):

#key = 40
packet[4]+packet[40:]+packet[4:40]

復号化 (C):

//in_buffer - main char* massive
//offs - offset of packet (length 188)
//key - int for separator (40 in example before)

void encryption(byte* in_buffer, int offs, int key)
{
  byte temp[188];
  int i;
  //write packet[4:40] to temp
  for(i = 4;i < key; i++)
  {  
    temp[i] = in_buffer[offs+i];
  }
  //write packet[40:] to top
  for(i = 4;i < 188 - key+4; i++)
  {  
    in_buffer[offs+i] = in_buffer[offs+i+key-4];
  }
  //write packet[4:40] of temp to in_buffer[152:]
  for(i = 4;i < key; i++)
  {  
    in_buffer[offs+i+188-key] = temp[i];
  }
}

key = 96 で機能しますが、他のキーでは機能しません! なんで?

4

1 に答える 1

0

配列の添え字演算はすべて厄介でエラーが発生しやすいものです。memcpyさまざまなパーツを所定の位置に「追加」するために使用します。

byte temp[188];
int pos = 0;

memcpy(temp + pos, in_buffer, 4); // append in_buffer[:4]
pos += 4;
memcpy(temp + pos, in_buffer + 188 - key + 4, key - 4); // append in_buffer[188-key+4:188]
pos += key-4;
memcpy(temp + pos, in_buffer + 4, 188 - key); // append in_buffer[4:188-key+4]
于 2012-09-21T11:03:11.860 に答える