Erstelle den DES-Schlüssel aus einer 56-Bit-Binärzeichenkette

8

Ich habe eine binäre 56-Bit-Zeichenfolge, die ich als geheimen Schlüssel für die DES-Verschlüsselung verwenden möchte.

Ich habe den folgenden Code auf der JCA Docs-Website gefunden

%Vor%

Dies verwendet jedoch 8 Bytes für den Schlüssel (statt 7). Es ist nicht klar, ob das desKeyData [0] dem niederwertigsten Byte oder dem signifikantesten Byte entspricht. Ist es auch möglich, die 56-Bit-Zeichenfolge direkt zu verwenden, um das Byte-Array zu generieren, das für diesen Zweck verwendet werden kann?

    
AnkurVj 13.02.2011, 17:15
quelle

2 Antworten

7

Von Wikipedia :

  

Der Schlüssel besteht angeblich aus 64 Bits; jedoch werden nur 56 davon tatsächlich von dem Algorithmus verwendet. Acht Bits werden nur zum Überprüfen der Parität verwendet und danach verworfen. Daher beträgt die effektive Schlüssellänge 56 Bits und wird niemals als solche angegeben. Jedes 8. Bit des ausgewählten Schlüssels wird verworfen, d.h. die Positionen 8, 16, 24, 32, 40, 48, 56, 64 werden von dem 64-Bit-Schlüssel entfernt, wobei nur der 56-Bit-Schlüssel zurückgelassen wird.

Somit werden die niedrigstwertigen Bits (d. h. die 0. Bits) nicht für die Schlüsselkonstruktion verwendet, sie können zum Prüfen der Parität nach DESKeySpec.isParityAdjusted() verwendet werden.

EDIT: Einfacher Test, der anzeigt, dass die niedrigstwertigen Bits ignoriert werden:

%Vor%     
axtavt 13.02.2011, 17:55
quelle
2

Ein wesentliches Bit ist derjenige, der das Vorzeichen eines eins oder Zweierkomplement Nummer. Die Idee eines höchstwertigen Bits kann nicht auf Bytes angewendet werden.

Wie axtavt antwortet, werden von allen 64 Bits der Sequenz nur die Bits in den Bereichen: (1..7), (9..15), (17..23), (25..31), (33..39), (41..47), (49..55), (57..63) als der eigentliche Schlüssel verwendet. Zum Beispiel sind die 56 relevanten Bits in der Sequenz, die zu 1 geändert wurde: 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f , wobei die höchstwertigen Bits als Paritätsprüfung auf Null stehen.

Um tatsächlich eine Sequenz von 7 Bytes und 56 Bits in eine 8-Byte-Sequenz zu konvertieren, können Sie diesen Code .

    
vz0 13.02.2011 23:18
quelle

Tags und Links