簡體   English   中英

如何在Java中執行按位排列

[英]how to perform bitwise permutation in java

我也在Java中實現DES,對於如何將純文本轉換為其對應的64位二進制塊以及如何使用置換表對其進行置換,我首先感到困惑。

例如。 我想從0123456789ABCDEF獲取000001010011100101110111000001000100100011010001010110,我該怎么做?

之后我想使用表格置換000001010011100101110111111000001000100100011010001010110

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
    };

您需要了解初始置換與正在加載的左右塊之間的關系:

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

輸入塊是八個8位字節(64位),分為兩個32位塊(左和右)。 IBM使用大字節序表示。

輸入塊的編號為1到64,其中1到8代表第一個字節,1代表該字節的MSB。

奇數位進入右塊,偶數位進入左塊。

上面顯示的“輸入字節數”和“類型中的位數”表示可用於將輸入字節映射到“左”和“右”塊表示。

以您的示例為例,您的輸入字節由兩個十六進制數字組成,分別為0x01、0x23、0x45、0x67、0x89、0xAB,0xCD和0xEF。 第一個字節提供輸入塊位1到8,第二個9到16,第三個17到24,第四個25到32,第五個33到40,第六個41到48,第七個49到56和第八個輸入塊位57到64。

實際的效果是在硬件實現中從8位接口串行加載8個8位移位寄存器,每個4個寄存器包含左寄存器和右寄存器。 對於舍入運算,左寄存器和右寄存器還能夠並行加載或並行讀取,以及可以串行移出以用於反向初始置換(這將反轉奇/偶關系)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM