Я работал над преобразованием метода шифрования C ++ в C #. Проблема в том, что я не могу заставить его шифровать / дешифровать так, как я хочу.
Идея проста: я собираю пакет и дешифрую его. Выход будет:
Размер пакета - Команда / Действие - Ноль (Конец)
(расшифровщик обрезает первые и последние 2 байта)
Код C ++ выглядит так:
// Crypt the packet with Xor operator
void cryptPacket(char *packet)
{
unsigned short paksize=(*((unsigned short*)&packet[0])) - 2;
for(int i=2; i<paksize; i++)
{
packet[i] = 0x61 ^ packet[i];
}
}
Поэтому я подумал, что это будет работать в C #, если я не хочу использовать указатели:
public static char[] CryptPacket(char[] packet)
{
ushort paksize = (ushort) (packet.Length - 2);
for(int i=2; i<paksize; i++)
{
packet[i] = (char) (0x61 ^ packet[i]);
}
return packet;
}
- но это не так, возвращаемое значение является просто еще одной строкой разметки вместо расшифрованного значения. Выходные данные: ..O ♦ & / OOOe.
Ну, по крайней мере, "/" по какой-то причине находится в правильном месте.
Дополнительная информация:
- Используемый мной тестовый пакет:
шестнадцатеричное значение: 0C 00 E2 66 65 47 4E 09 04 13 65 00
Обычный текст: ... feGN ... e.
Расшифровано: XX / здесьXX
X = Неизвестное значение, я не могу вспомнить, но это не имеет значения.
- Используя Hex Workshop, вы можете расшифровать пакет следующим образом:
- Специально Вставьте шестнадцатеричное значение как CF_TEXT, убедитесь, что флажок «обрабатывать как шестнадцатеричное значение» установлен.
- Затем выберите все из шестнадцатеричного значения, которое вы только что вставили, кроме первого и последних 2 байтов.
- Выберите Инструменты> Операции> Xor.
- Выберите «Обрабатывать данные как 8-битные данные» и установите значение «61».
- Нажмите «ОК», и все готово.
Это вся информация, которую я могу дать на данный момент, потому что я пишу это с макушки головы.
Спасибо за ваше время.
Если вы не видите в этом вопрос:
Было бы замечательно, если бы кто-то мог взглянуть на код, чтобы увидеть, что с ним не так, или если есть другой способ сделать это. Я конвертирую этот код, потому что я ужасен с C ++ и хочу создать приложение C # с этим кодом.
Ps: теги кода и тому подобное были неприятны, поэтому извините, если интервал и т. Д. Немного испорчены.