Rotieren

Es gab eine Zeit da beschäftigte ich mich mit Kryptologie. Ich schrieb zu dieser Zeit jedoch meine Programme noch in M68K Assembler. Die CPU kennt einige Befehle zum Rotieren von Bits. Gewohnt ist man jedoch nur das schrieben.

Wo besteht der Unterschied ?

Beim schieben werden die Bits über den Rand hinausgeschoben. Dort gehen sie verloren und in Abhängigkeit der Methode wird 0 oder 1 nachgeschoben. (Durch schieben kann man sehr schnelle Multiplikationen oder Divisionen die mit der Basis 2 zu tun haben durchziehen. Very FAST :).

Beim rotieren werden die Bits die auf der einen Seite heraus geschoben werden auf der anderen wieder eingefügt. Diese Tatsache hilft ein paar Kryptische Routinen auf zu peppen. Da die Motorolla CPU das direkt Unterstützte war hier eine sehr schnelle Methode möglich. Die C Methode ist etwas langsamer. Das Problem in C ist jedoch, das man hier nicht Routieren kann - so ist eine Extra Routine fällig die das macht. In Basic kann man gar nicht schieben, da das man mit 256 Teilen oder Multiplizieren.

Das Prinzip ist einfach. Wenn wir die Bits nicht vom Compiler nachgeschoben bekommen, müssen wir sie selbst schieben. Dazu zerlegen wir den Dateityp (long int byte) in die Entsprechenden Hälften. Abhängig von der Richtung und der Anzahl der Bits. Als Beispiel nehmen wir das Bitmuster eines Bytes: %10010100 . Dieses wollen wir nun 3 Bits nach Links verschieben.

1.
zwi1=%10010100
zwi2=%10010100

2.
zwi1=%10100000
zwi2=%00000100

3.
zwi1=%10100000
zwi2=%00000100
------------------ OR
%10100100

Schritt1 : Zwi Zwischenvariablen anlegen und das Byte speichern
Schritt2.1: Zwi1 um n Bits nach links schieben
Schritt2.2: Zwi2 um 5 (8-n) Bits nach rechts schieben
Schritt3 : Ergebnisse als ODER verknüpfen.

zeich2 = zeich2<<(unsigned char) ((sizeof(zeich2) << 3) -n);

Im prinzip könnte man sich das sizeof(zeich2)<<3) sparen und direkt 8 hinschreiben. Da mein Compiler daraus aber eine Constante macht lasse ich es mal so, da ich den Quelltext so schneller umkopiert habe und die Größe der Berechnung stimmt;)


C Routinen zum Rotieren als Donwload (ggf. Schift Taste gedrückt halten)