From 维基百科 http://en.wikipedia.org/wiki/Data_Encryption_Standard:
密钥表面上由 64 位组成;然而,算法实际上只使用了其中的 56 个。八位仅用于检查奇偶校验,然后被丢弃。因此,有效密钥长度为 56 位,并且从未如此引用。所选密钥的每第 8 位都会被丢弃,即从 64 位密钥中删除位置 8、16、24、32、40、48、56、64,仅留下 56 位密钥。
因此,最低有效位(即第 0 位)不用于密钥构造,它们可用于检查奇偶校验DESKeySpec.isParityAdjusted()
.
EDIT:简单测试显示最低有效位被忽略:
SecretKeyFactory sf = SecretKeyFactory.getInstance("DES");
byte[] in = "test".getBytes("UTF-8");
Cipher c1 = Cipher.getInstance("DES");
c1.init(Cipher.ENCRYPT_MODE, sf.generateSecret(new DESKeySpec(
new byte[] {0x10,0x20,0x30,0x40,0x50,0x60,0x70,(byte) 0x80})));
byte[] r1 = c1.doFinal(in);
Cipher c2 = Cipher.getInstance("DES");
c2.init(Cipher.ENCRYPT_MODE, sf.generateSecret(new DESKeySpec(
new byte[] {0x11,0x21,0x31,0x41,0x51,0x61,0x71,(byte) 0x81})));
byte[] r2 = c2.doFinal(in);
assertArrayEquals(r1, r2);