用Java实现DES系统中的密钥置换

用Java实现DES系统中的密钥置换,java,permutation,des,Java,Permutation,Des,假设我有一个(8*8)位块(64位块)。。我需要根据给定的排列表来排列它。排列表(8*7)显示要排列的64位块中每个位的位置 Example: (64=bits) Permutation Tbale (8*7) 0 0 1 0 .. 57 49 41 ... 0 1 1 0 .. AND 1 58 50 .. 1 0 0 1 .. 10 2 59 ... . . 所以从排列表中。。数字57标识来自64位块的位57被放置为新(8×7)阵列的第一位

假设我有一个(8*8)位块(64位块)。。我需要根据给定的排列表来排列它。排列表(8*7)显示要排列的64位块中每个位的位置

 Example:
(64=bits)        Permutation Tbale (8*7)
0 0 1 0 ..       57 49 41 ...
0 1 1 0 ..  AND  1  58 50 ..
1 0 0 1 ..       10 2 59 ...
. .  

所以从排列表中。。数字57标识来自64位块的位57被放置为新(8×7)阵列的第一位(排列表中57的位置)。是否有办法使用数字57来识别第57位的确切行和列?谢谢

假设所有索引都从0开始,
57/8=7
,所以第8行是索引7<代码>57%8=1,所以列中有索引1(第二列)。

我以前尝试过这种方法。。但它并不总是起作用。。例如,位63位于第7行(第8行)和第6列(第7列),但63/8=7(正确)和63%8=7(不正确)。请注意:位块和排列表的大小不同。假设索引从0开始,位63是最后一位,因此其坐标为[7,7]。如果位63位于[7,6],则表示索引从1开始,而不是从0开始。因此,只需在除法之前将1移到索引中:
(63-1)/8=7
<代码>(63-1)%8=6。