5

一部の学生のものについては、Java で Feistel ネットワークを実装する必要があります。

次のように、3回の手動ラウンドから始めました。

    // round 1
    int[] left1 = right;
    int[] right1 = new int[right.length];

    for(int i = 0; i < right.length; i++){
        right1[i] = left[i] ^ (right[i] ^ keys[0]);
    }

    // round 2
    int[] left2 = right1;
    int[] right2 = new int[right.length];

    for(int i = 0; i < right.length; i++){
        right2[i] = left1[i] ^ (right1[i] ^ keys[1]);
    }

    // round 3
    int[] left3 = right2;
    int[] right3 = new int[right.length];

    for(int i = 0; i < right.length; i++){
        right3[i] = left2[i] ^ ( right2[i] ^ keys[2]);
    }

10ラウンドしたい場合、これを10回コピーして変数を調整する必要がありますが、これを行うより良い方法はありますか? 手遅れかもしれませんが、解決策が思い浮かびません...

4

2 に答える 2

1

2次元配列を使用

int rounds = 10 // number of rounds
int leftArray = new int[rounds][right.length];
int rightArray = new int[rounds][right.length];

それで:

  • leftArray[0][0]と同等left1[0]です。
  • leftArray[0][1]と同等left1[1]です。
  • rightArray[0][0]と同等right1[0]です。
  • rightArray[2][2]と同等right3[2]です。
  • ...

次に、ネストされたループを使用して、必要なことを繰り返します

for(int i=0; i<rouds; i++){
  //set your variables
  for(int j=0; j<right.length; j++){
  //do computation here
  }
}
于 2015-05-13T01:55:33.143 に答える