Encryption
帶有實際 7 字節密鑰的 DES
我們是否有任何庫或任何機制可以將真正的 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; }