1

这些天,我在密码分析领域工作,并开始使用 C# 进行编程

现在,
为了找到 5 个最佳 s-box(我的意思是那些 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 分别放置for 循环或将结果保存在数组中。

任何帮助表示赞赏。

4

2 回答 2

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

然而,这个问题可以通过多种方式解决。

于 2013-07-16T12:27:28.897 回答
0
for (int j = 0; j < Math.Pow(2, 24); j++)
  {
           Console.WriteLine(Convert.ToString(j, 2).PadRight(24, '0'));
  }  
于 2013-07-17T08:42:28.083 回答