Ich bin ein Student, der versucht, den DES-Algorithmus zu implementieren. Ich habe die Wahl zwischen 2 Sprachen: C und Java. Ich habe den Algorithmus verstanden, aber ich stecke ganz am Anfang fest, was die Manipulation des Schlüssels angeht.
Hier ist das Problem. In DES haben wir einen 64-Bit-Schlüssel (8 Zeichen in C und 4 in Java, obwohl ich das Zeichen in Byte umwandeln kann, um nur den ASCII-Teil zu erhalten), von dem jedes achte Bit ein Paritätsbit ist und gestrippt werden muss, um einen 56-Bit-Schlüssel daraus zu machen und weiter zu verarbeiten. Ich habe lange darüber nachgedacht, kann aber keine Möglichkeit finden, jedes 8. Bit zu entfernen und das Ergebnis in einem anderen char-Array zu speichern (sowohl in Java als auch in C). Ich habe es mit dem java.util.BitSet class
aber ich war verwirrt.
Gibt es Vorschläge, wie ich jedes 8. Bit entfernen und benachbarte Bytes (Java) oder Zeichen (C) zusammenfügen kann, um den 56-Bit-Schlüssel zu erhalten?
Ich bin mir der Bitoperationen und der Verschiebung bewusst, aber für das konkrete Beispiel:
Angenommen, ich habe einen 16-Bit-Schlüssel: 1100 1001 1101 1000
.
Ich muss das 8. und 16. Bit entfernen, um den Schlüssel herzustellen: 1100 100 1101 100
.
Wenn ich 2 Bytes deklariere, wie schneide ich das 8. Bit ab und hänge das 9. Bit an, wodurch das erste Byte entsteht: 1100 1001
Ich brauche also Hilfe bei der Frage, wie ich das 8. Bit durch das 9. Bit, das 16. Bit durch das 17. Bit usw. ersetzen kann, um einen 56-Bit-Schlüssel aus einem 64-Bit-Schlüssel abzuleiten.
Wenn mir das jemand erklären kann, kann ich es vielleicht unabhängig von der Sprache umsetzen.