2013-07-16 4 views
1

В эти дни, я работаю в области криптоанализа и начали делать программирование с помощью C#генерации 2^24 таблиц, которые различаются только по одному биту с C#

Теперь,
Для нахождения 5 оптимальной s-boxes (я имею в виду те 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 

Третий один, который отличается только на один бит coparing ко второму:

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.

Любая помощь приветствуется.

ответ

0
for (int j = 0; j < Math.Pow(2, 24); j++) 
    { 
      Console.WriteLine(Convert.ToString(j, 2).PadRight(24, '0')); 
    } 
+0

, мы можем использовать 16777216 вместо Math.Pow (2,24) – samsam114

+0

Существует некоторая проблема с этим кодом, он повторяет некоторые значения ... – User1551892

+1

это не важно. все перестановки должны быть сгенерированы. – samsam114

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; 
    } 

Однако эта проблема может быть решена во многих отношениях.

+0

спасибо. вход фиксирован, цифры между 0-7. проблема заключается именно в том, «как генерировать результаты»? Как изменить один бит? как двигаться вперед? СПАСИБО, СНОВА. – samsam114

+1

Я думал, вы знаете, как генерировать данные, и у вас есть проблемы, связанные с циклом. Я постараюсь, если смогу вам помочь. – User1551892

+0

Спасибо Пользователь1551892 – samsam114