Sie können einfach tauschen vorwärts ein rückwärts:
//initialization
int[] left = {};//setup left
int[] right = {};//setup right
//keys
int[] keys = {};//setup keys
for(int r = 0; r < 10; r++) {//the number of rounds
for(int i = 0; i < right.length; i++){
right[i] = left[i]^(right[i]^keys[r]);
}
//swap lists to do the next round
int[] temp = left;
left = right;
right = temp;
}
//remark: the result (right) will be stored in left
//use left as resulting right
Nach jeder Runde, tauschen Sie links und rechts durch, um auf Referenzniveau zu tun (und verwenden temp
) vorübergehend zu speichern Referenz:
int[] temp = left;
left = right;
right = temp;
Beachten Sie, dass Sie dies nicht tun Kopie die Werte hier, Sie einfach Referenzen tauschen, dies so ist in konstanter Zeit erfolgen. Dies kann nützlich sein, wenn Sie lange Nachrichten verschlüsseln/entschlüsseln wollen und keine Zeit mit dem erneuten Kopieren verschwenden möchten.
Also, was passiert ist, Sie zunächst drei Listen L, R und K
nun in der ersten Runde haben, können Sie einfach den Lift ändern, elementweise, wie Sie in Ihrem Code gezeigt haben:
for(int i = 0; i < right.length; i++){
right[i] = left[i]^(right[i]^keys[r]);
}
Wichtig ist, dass Sie nicht keys[i]
schreiben, sondern verwenden keys[r]
(der Index der aktuellen Runde ist): es bedeutet, dass Sie mindestens 10
Tasten haben die Arithmetik natürlich zu tun.
Beachten Sie, dass Sie right[i]
überschreiben können, da Sie diesen Wert später nicht wiederverwenden. Sie können also Inline-Änderungen vornehmen.
Nach den Änderungen tauschen Sie die Puffer aus. Der einzige Aspekt, den Sie berücksichtigen müssen, ist, dass für die letzte Runde nach der Operation auch die Puffer ausgetauscht werden. Somit werden auch die letzten left
und right
getauscht. Sie können entweder (1) einen zusätzlichen Swap nach der for-Schleife ausführen; oder (2) den Swap berücksichtigen und so tun, als sei left
right
und umgekehrt; oder (3) verwenden Sie eine if
-Klausel, um den letzten Austausch zu verhindern.
Nur wickeln einer von ihnen in eine wie die, die für die Schleife tun müssen, um laufen sind Sie bereits mit –
dann habe ich ein Problem mit left1 immer mit dem ursprünglichen Recht überschrieben, brauche ich die linken und rechten Arrays aus der vorherigen Runde. – fsp