Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2014, 09:24   #1
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию генерация всех возможных значений по xor'у двух байт

Доброго всем времени суток.
Заинтересовался возможностью брута сксоренных значений(с:=a xor b), хочу написать алгоритм который по значению байта, выдаст массив всех наборов байт, ксор которых дает тот самый входной байт но чета я жезка туплю, единственное что точно понял это что комбинаций строго 256 и что сетить биты нужно учитывая два варианта:
для нуля 0 xor 0 и 1 xor 1, а для однерки 0 xor 1 и 1 xor 0
помогите составить порядок действий, не прибегаюя к бруту всех значений плз
пыжок

Последний раз редактировалось maloun; 04.02.2014 в 09:26.
maloun вне форума Ответить с цитированием
Старый 04.02.2014, 09:35   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

мне кажется, что Вы заблуждаетесь.
только ПОЛНЫЙ перебор, только хардкор!

допустим, есть трёхбитное (для простоты) значение:
101

попробуйте отобразить варианты входных значений данных и ключа, которые дают подобный результат. Подсчитайте, убедитесть, что входных данных, которые дают подобный результать ровно 8 штук (2 в степени 3). Следовательно, для байта таких вариантов будет ровно 256 (от 00000000b до 11111111b )


для закрепления темы рекомендую ознакомится с шифром с абсолютной криптографической стойкостью: Шифр Вернама

Последний раз редактировалось Serge_Bliznykov; 04.02.2014 в 09:38.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.02.2014, 09:36   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
for a:=0 to 255 do b:=c xor a;
вот они и все 256 пар a и b. Проще нет способа
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.02.2014, 11:15   #4
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
for a:=0 to 255 do b:=c xor a;
вот они и все 256 пар a и b. Проще нет способа
да, извиняюсь, я забыл указать главное условие, чисел a и b у алгоритма не будет, только результат xor'а
пыжок
maloun вне форума Ответить с цитированием
Старый 04.02.2014, 11:24   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Дык и не предполагал что они есть. а - переменная цикла, b - вычисляется, c - задается
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.02.2014, 11:40   #6
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Дык и не предполагал что они есть. а - переменная цикла, b - вычисляется, c - задается
и правда... спасибо!!!!!

Код:
type
  ByteLenArray = Array[Byte] of Word;

function GetXORArray(x:Byte):ByteLenArray;
var
  i:integer;
begin
  for i:=0 to 255 do
    Result[i]:=(i xor x) shl 8 or i;
end;
пыжок

Последний раз редактировалось maloun; 04.02.2014 в 11:56. Причина: улучшил код
maloun вне форума Ответить с цитированием
Старый 04.02.2014, 12:35   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А зачем массив of Word? Индекс в массиве и есть один из двух байтов. Так по-моему симпатичней
Код:
type ByteLenArray = Array[Byte] of Byte;

procedure GetXORArray(x: Byte; var b: ByteLenArray);
var i: Byte;
begin
  for i:=0 to 255 do b[i]:=i xor x;
end;

...

var b: ByteLenArray;

...

  GetXORArray(11,b);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.02.2014, 14:50   #8
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

нет ничего практичнее ассемблера =)
Код:
type
  ByteLenArray = Array[Byte] of Byte;

procedure GetXORArray(x:Byte; out res:ByteLenArray); register;
asm
        xor     ecx, ecx
@@loop:
        mov     ah, cl
        xor     ah, al
        mov     [edx+ecx], ah
        inc     cl
        jnz     @@loop
        retn
end;
пыжок

Последний раз редактировалось maloun; 04.02.2014 в 15:11.
maloun вне форума Ответить с цитированием
Старый 04.02.2014, 14:53   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
нет ничего практичнее ассемблера
Ну да, практичнее. Забодаешься на нем практично писать все. А экономии в данном случае ноль
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.02.2014, 14:56   #10
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ну да, практичнее. Забодаешься на нем практично писать все. А экономии в данном случае ноль
так вот она экономия, посмотрите как делфи компилит ассемблер
Код:
.text:004D27CC                 public GetXORArray
.text:004D27CC GetXORArray     proc near
.text:004D27CC                 push    ebx
.text:004D27CD                 push    esi
.text:004D27CE                 mov     esi, edx
.text:004D27D0                 xor     edx, edx
.text:004D27D2                 mov     ecx, esi
.text:004D27D4
.text:004D27D4 loc_4D27D4:                             ; CODE XREF: GetXORArray+12 j
.text:004D27D4                 mov     ebx, edx
.text:004D27D6                 xor     bl, al
.text:004D27D8                 mov     [ecx], bl
.text:004D27DA                 inc     edx
.text:004D27DB                 inc     ecx
.text:004D27DC                 test    dl, dl
.text:004D27DE                 jnz     short loc_4D27D4
.text:004D27E0                 pop     esi
.text:004D27E1                 pop     ebx
.text:004D27E2                 retn
.text:004D27E2 GetXORArray    endp
пыжок
maloun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод всех возможных значений в примечании отчета Natasha63 Microsoft Office Access 1 16.12.2012 17:23
Генерация всех возможных вариантов NanaTich Помощь студентам 6 23.05.2011 07:00
Генератор всех возможных паролей fartfart Общие вопросы Delphi 16 03.02.2011 05:24
Перебор всех возможных вариантов phenix Помощь студентам 3 03.12.2010 21:29
Перебор всех возможных вариантов [MI_nor] Общие вопросы C/C++ 9 01.04.2009 21:17