Bạn có thể dễ dàng trao đổi về phía trước một ngược:
//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
Sau mỗi vòng, bạn hoán đổi trái và phải làm như vậy ở cấp tài liệu tham khảo (và sử dụng temp
) để lưu trữ tạm thời tham khảo:
int[] temp = left;
left = right;
right = temp;
lưu ý rằng bạn không bản sao các giá trị ở đây, bạn chỉ đơn giản là trao đổi tài liệu tham khảo, do đó điều này được thực hiện trong thời gian liên tục. Điều này có thể hữu ích nếu bạn muốn mã hóa/giải mã các tin nhắn dài và không muốn lãng phí thời gian sao chép lại.
Vì vậy, những gì xảy ra là, ban đầu bạn có ba danh sách L, R và K
Bây giờ ở vòng đầu tiên, bạn chỉ cần sửa đổi danh sách thang máy, yếu tố khôn ngoan như bạn đã thấy trong mã của bạn:
for(int i = 0; i < right.length; i++){
right[i] = left[i]^(right[i]^keys[r]);
}
Quan trọng là bạn không viết keys[i]
, nhưng sử dụng keys[r]
(chỉ mục là vòng hiện tại): nó ngụ ý bạn có ít nhất 10
phím để thực hiện số học của khóa học.
Lưu ý rằng bạn có thể ghi đè right[i]
vì bạn không sử dụng lại giá trị đó sau đó. Do đó, bạn có thể thực hiện các sửa đổi nội tuyến.
Sau khi sửa đổi, bạn trao đổi bộ đệm. Khía cạnh duy nhất bạn cần phải tính đến là ở vòng cuối cùng, sau khi thực hiện thao tác, các bộ đệm cũng sẽ được hoán đổi. Do đó, left
và right
cuối cùng cũng sẽ được hoán đổi. Bạn có thể (1) thực hiện hoán đổi bổ sung sau vòng lặp for; hoặc (2) xem xét hoán đổi và giả vờ left
là right
và ngược lại; hoặc (3) sử dụng if
-nhận để ngăn chặn lần hoán đổi cuối cùng.
Chỉ cần quấn một trong số họ trong một vòng lặp for như những người bạn đã sử dụng –
sau đó tôi có một vấn đề với left1 luôn bị ghi đè bằng quyền gốc, tôi cần các mảng trái và phải từ vòng trước. – fsp