gpt4 book ai didi

java - 如何在java中进行按位排列

转载 作者:行者123 更新时间:2023-12-01 11:55:41 25 4
gpt4 key购买 nike

我也在java中实现DES,我首先对如何将纯文本获取到其相应的64位二进制 block 并使用排列表对其进行排列感到困惑。

例如。我想从 0123456789ABCDEF 获取 000001010011100101110111000001000100100011010001010110,我该怎么做?

之后我想使用表格排列 000001010011100101110111000001000100100011010001010110

private static final byte[] IP = { 
58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6,
64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1,
59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5,
63, 55, 47, 39, 31, 23, 15, 7
};

最佳答案

您需要了解初始排列与您正在加载的左右 block 之间的关系:

Big   MSB7     Input Block (64 bits)                    
End Bit Left Register (32 bits)
2------6-------58 50 42 34 26 18 10 2 1 2 3 4 5 6 7 8
4------4-------60 52 44 36 28 20 12 4 9 10 11 12 13 14 15 16
6------2-------62 54 46 38 30 22 14 6 17 18 19 20 21 22 23 24
8------0-------64 56 48 40 32 24 16 8 25 26 27 28 29 30 31 32

Right Register (32 bits)
1------7-------57 49 41 33 25 17 9 1 1 2 3 4 5 6 7 8
3------5-------59 51 43 35 27 19 11 3 9 10 11 12 13 14 15 16
5------3-------61 53 45 37 29 21 13 5 17 18 19 20 21 22 23 24
7------1-------63 55 47 39 31 23 15 7 25 26 27 28 29 30 31 32

Input Byte 8 7 6 5 4 3 2 1

输入 block 是八个 8 位字节(64 位),它们将分为两个 32 位 block (左和右)。 IBM 使用大端字节表示法。

输入 block 的编号为 1 到 64,其中 1 到 8 代表第一个字节,1 代表该字节的 MSB。

奇数位进入右 block ,偶数位进入左 block 。

上面显示的输入字节编号和位类型表示可用于将输入字节映射到左 block 和右 block 表示。

对于您的示例,您的输入字节由两个十六进制数字组成,分别是 0x01、0x23、0x45、0x67、0x89、0xAB、0xCD 和 0xEF。第一个字节提供输入 block 位 1 到 8、第二个 9 到 16、第三个 17 到 24、第四个 25 到 32、第五个 33 到 40、第六个 41 到 48、第七个 49 到 56 和第八个输入 block 位 57 到 64。

实际效果是从硬件实现中的 8 位接口(interface)串行加载 8 个 8 位移位寄存器,其中四个各包含左寄存器和右寄存器。对于循环操作,左寄存器和右寄存器还能够并行加载或并行读取,以及串行移出以进行逆初始排列(反转奇/偶关系)。

关于java - 如何在java中进行按位排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28458741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com