Encryption

帶有實際 7 字節密鑰的 DES

  • April 24, 2018

我們是否有任何庫或任何機制可以將真正的 7 字節密鑰用於 DES 而不是 8 字節密鑰。我需要它來進行 DES 中的密鑰分析,並且關聯庫的 8 字節密鑰要求在獲取實際密鑰分析時產生了問題。

您需要將您的密鑰分成 8 個 7 位片段,並將這 7 個位元分別放入一個字節中。在大多數平台上,奇偶校驗位在最低有效位,因此 7 位需要進入最高有效位。當然,由於密鑰可能以字節為單位,因此您需要移位並組合字節中的值以檢索 7 位。

庫可能不需要設置奇偶校驗位。在這種情況下,您不需要計算奇偶校驗。否則,一旦獲得 8 個字節,您只需創建奇偶校驗。

下面的程式碼是用 Java 編寫的(這讓它有點尷尬,因為 Java 字節是有符號的,而且大多數計算都採用整數)。

// --- create 64 bit key from 56 bit key
// least significant bit can have any value
key64[0] = (byte) (key56[0] & 0xFE); // << 0
key64[1] = (byte) ((key56[0] << 7) | ((key56[1] & 0xFF) >>> 1));
key64[2] = (byte) ((key56[1] << 6) | ((key56[2] & 0xFF) >>> 2));
key64[3] = (byte) ((key56[2] << 5) | ((key56[3] & 0xFF) >>> 3));
key64[4] = (byte) ((key56[3] << 4) | ((key56[4] & 0xFF) >>> 4));
key64[5] = (byte) ((key56[4] << 3) | ((key56[5] & 0xFF) >>> 5));
key64[6] = (byte) ((key56[5] << 2) | ((key56[6] & 0xFF) >>> 6));
key64[7] = (byte) (key56[6] << 1);

// --- set parity in time independent of the values within key64
for (int i = 0; i < key64.length; i++) {
   // if even # bits, make uneven, take last bit of count so XOR with 1
   // for uneven # bits, make even, take last bit of count so XOR with 0  
   key64[i] ^= Integer.bitCount(key64[i] ^ 1) & 1;
}

引用自:https://crypto.stackexchange.com/questions/15799