Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Как работать с бинарными последовательностями в C#?  [new]
iskatelsql
Member

Откуда:
Сообщений: 782
Вот например:

Есть некоторая последовательность, которая xor с dword с первого её байта, потом результат опять xor с dword , но уже со второго байта результата, потом с третьего и т.д.

Картинка с другого сайта.

Как подобное можно изобразить на C#?
2 мар 19, 15:08    [21823334]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
И в чем проблема?
const uint xor = 123456;
var bytes = Enumerable.Range(0, 256).Select(n => (byte)n);
foreach (var x in bytes.Select(b=>b ^ xor))
  Console.WriteLine("{0:X} {1}", x, x ^ xor);

P.S. Результат XOR типов byte и uint (DWORD) будет иметь тип uint, если что.
2 мар 19, 15:24    [21823339]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
iskatelsql
Member

Откуда:
Сообщений: 782
Сон Веры Павловны,

Так у вас вроде как каждый байт xor-ится с числом. Приглядитесь к картинке, там xor-ятся в первом заходе с первого по четвертый, во втором заходе со второго по пятый. Причем не байт с числом, а байт последовательности с соответствующим байтом dword
2 мар 19, 15:36    [21823341]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
iskatelsql
Сон Веры Павловны,

Так у вас вроде как каждый байт xor-ится с числом. Приглядитесь к картинке, там xor-ятся в первом заходе с первого по четвертый, во втором заходе со второго по пятый. Причем не байт с числом, а байт последовательности с соответствующим байтом dword

Ну, допустим. Проблема-то у вас в чем заключается? Не значете, как сделать xor? Выше это было показано. Не знаете, как выделить старший/младший байт из uint? Старший - сдвиг влево, младший - & 0xFF. Всё остальные проблемы исключительно алгоритмического характера, все необходимые технические средства для реализации в C# есть.
2 мар 19, 16:58    [21823366]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
iskatelsql
Member

Откуда:
Сообщений: 782
Да вопрос вобщемто больше был про то как тут с массивами и указателями работать, мне с асма нужно кусок логики перетащить.
2 мар 19, 17:02    [21823371]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 1891
>iskatelsql,сегодня, 17:02 [21823371]
>Да вопрос вобщемто больше…
<Как я понимаю, последовательность у Вас это byte[]?
Преобразуйте сиё в MemoryStream и будет Вам счастье.
2 мар 19, 17:14    [21823373]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
iskatelsql
Да вопрос вобщемто больше был про то как тут с массивами и указателями работать, мне с асма нужно кусок логики перетащить.

Кхм. Начинает проявляться конкретика. У вас на входе указатель на unmanaged-память? Или результат будет отправлен в unmanaged? Если ни то, ни другое - зачем вам указатели? Почему не обойтись чисто managed-кодом?
2 мар 19, 17:32    [21823383]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
iskatelsql
Member

Откуда:
Сообщений: 782
Да можно и обойтись если можно. Только не очень представляю как, глядя в отладчик... Ну не переводятся у меня регистры процессора в выражения Linq в голове автоматически :) Плюс этот кусок кода - какое-то самопальное шифрование файла, в основном и состоящее из подобных xor и остальных псевдорандомных вычислений, которые сложно разбить на отдельные логические части.

Я не встречал в туториалах примеры работы с бинарными данными на шарпе, а по форумам тоже маловато гуглится. Если это гораздо сложнее сделать на шарпе чем на сях, думаю сделать отдельную длл, в которую элементарно скопипастить куски кода из отладчика. Правда тот код за собой qt4core тянет, многовато лишнего из за одной функции.
2 мар 19, 17:54    [21823390]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 1891
>iskatelsql, сегодня, 17:54 [21823390]
>Я не встречал в туториалах примеры работы …
<Погугли это: MemoryStream, byte[], BitConverter.
2 мар 19, 18:55    [21823405]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 1891
>iskatelsql, сегодня, 17:54 [21823390]
>Я не встречал в туториалах примеры работы …
<Погугли это: MemoryStream, byte[], BitConverter.
2 мар 19, 18:58    [21823406]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 1891
>iskatelsql, сегодня, 17:54 [21823390]
>Я не встречал в туториалах примеры работы …
<Погугли это: MemoryStream, byte[], BitConverter.
2 мар 19, 19:03    [21823408]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
Dima T
Member

Откуда:
Сообщений: 13623
iskatelsql
Да можно и обойтись если можно. Только не очень представляю как, глядя в отладчик... Ну не переводятся у меня регистры процессора в выражения Linq в голове автоматически :) Плюс этот кусок кода - какое-то самопальное шифрование файла, в основном и состоящее из подобных xor и остальных псевдорандомных вычислений, которые сложно разбить на отдельные логические части.

Я не встречал в туториалах примеры работы с бинарными данными на шарпе, а по форумам тоже маловато гуглится. Если это гораздо сложнее сделать на шарпе чем на сях, думаю сделать отдельную длл, в которую элементарно скопипастить куски кода из отладчика. Правда тот код за собой qt4core тянет, многовато лишнего из за одной функции.

В C# есть unsafe код, по сути это почти тоже самое что С. Там есть указатели.
https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/unsafe-code-pointers/
2 мар 19, 19:37    [21823418]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
L1G
Member

Откуда:
Сообщений: 102
iskatelsql, заранее сорри за отвлечение от темы,
но заметьте, что каждый байт вашей последовательности, за исключением первых и последних трех, будет проксорен со всеми 4 байтами dword, т.е. по сути с одним и тем же байтом: операция xor коммутативна и x^a^b^c^d == x^(a^b^c^d)

либо ваш алгорим изначально плохо задуман и его стоит поменять (если это такая наколенная криптография и т.п.), либо напрашивается оптимизация:
1) проксорить между собой 4 байта dword и скопировать результат на все 4 байта dword
2) этим dword ксорить последовательность c шагом в dword (а не в байт), за исключением первых и последних 4 байт (не трех - так быстрее из-за выравнивания адресов процессором). а 64-битным qword может оказаться еще быстрее.
3) как обработать первые и последние 4 байта - сами сообразите.
2 мар 19, 19:41    [21823419]     Ответить | Цитировать Сообщить модератору
 Re: Как работать с бинарными последовательностями в C#?  [new]
iskatelsql
Member

Откуда:
Сообщений: 782
L1G,

Все гораздо проще - я для примера написал одинаковое число чтоб не заморачиваться на деталях, там оно меняется. И код уже есть, даже скомпилированный и работает :), мне его перенести нужно.
2 мар 19, 19:47    [21823424]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить