Создание 2^24 таблиц, которые отличаются только на один бит с C#
В настоящее время я работаю в области криптоанализа и начал заниматься программированием на C#
Сейчас,
Чтобы найти 5 оптимальных s-блоков (я имею в виду эти 2^24 таблицы), сначала их нужно сгенерировать. Я знаю все о критериях поиска оптимальных.
Здесь sbox представляет собой таблицу 2*8, первая строка которой содержит числа от 0 до 7(двоичные:000 - 111)(как вход sbox), а во второй строке каждый вход (0 - 7) связан с числом., как показано ниже:
Первый sbox:
input 000 001 010 011 100 101 110 111
output 000 000 000 000 000 000 000 000
Второй sbox, который отличается только на один бит:
input 000 001 010 011 100 101 110 111
output 001 000 000 000 000 000 000 000
Третий, который отличается только на один бит, копируется ко второму:
input 000 001 010 011 100 101 110 111
output 010 000 000 000 000 000 000 000
и 2^24-й:
input 000 001 010 011 100 101 110 111
output 111 111 111 111 111 111 111 111
Вопрос в том, как сгенерировать эти таблицы? я не знаю, как положить для цикла или сохранить результаты в массиве отдельно для каждого sbox.
Любая помощь приветствуется.
2 ответа
for (int j = 0; j < Math.Pow(2, 24); j++)
{
Console.WriteLine(Convert.ToString(j, 2).PadRight(24, '0'));
}
Может быть, эти строки кода помогут вам:
class Program {
static void Main( string[ ] args ) {
Dictionary< long, Tuple <input, output> > dict = new Dictionary<long,Tuple<input,output>> () ;
for (long i = 0 ; i < (long) (2^28) ; i++) {
input ip = new input( );
output op = new output( );
for( int j = 0; j < 8; j++ ) {
//you have to write your own lodic for creating input and output
unit isp = new unit( );
unit osp = new unit( );
ip.iData[ j ] = isp;
op.oData[ j ] = osp;
}
dict.Add( i, Tuple.Create( ip, op ) );
}
}
}
public class input {
public unit [] iData = new unit [8] ;
}
public class output {
public unit[ ] oData = new unit[ 8 ];
}
public class unit {
public int item1;
public int item2;
public int item3;
}
Однако эту проблему можно решить разными способами.