Rückgekoppeltes Schieberegister



  • Hallo zusammen,

    um gleich eines klarzustellen: Ich will so eine Art Cäsar-Chiffre, nur halt mit
    bits 😉

    Ich habe im Internet schon etliche Foren durchforstet und im Buch meines Vertauens gesucht, aber keine Antwort gefunden. Ich habe gelesen, dass man sowas in Assembler machen kann. Das will ich aber nicht. Ich versuche nämlich, die CrazyCode-Blockchiffre (eigener Algorithmus) zu implementieren, und wie bei vielen Algorithmen gibt es auch hier einen Linksshift um 32 Bit über alle Blöcke. Das heißt:

    Eine Variable, die beliebe Zeichen enthält,
    sieht so aus: "abcde"
    Nach einem Linksshift um 1 Zeichen: "bcdea".

    Wisst ihr, wie man so einen rückgekoppelten Shift erreichen könnte?

    Ich habe das jetzt nicht als Code gepostet, weil es eigentlich keiner ist. Wie gesagt, ich habe schon überall gesucht, aber nichts brauchbares gefunden. Ich habe schon einige Implementationen der Cäsar-Chiffre gesehen, aber nicht wirklich verstanden - siehe Signatur 😉

    Vielen Dank für eure Hilfe.
    Ich hoffe, ich habe mich nicht zu unverständlich ausgedrückt.
    Code gibt es hier nicht, weil ich einfach nicht weiterkomme und nach stundenlanger Suche immer noch keine Ahnung habe, wie man sowas machen könnte. Ich weiß, dass man das letzte Zeichen rausschneiden und vorne anhängen könnte, aber bei einem 32-Bit-Shift erscheint mir das sehr umständlich.
    Sorry falls ich dumme Fragen stelle, aber ich bin neu hier 😉



  • Falls es jemanden interessiert, kann ich hier den derzeitigen Entwurf des CrazyCode-Algorithmus posten. Es ist aber nicht speziell dieser Algorithmus, weshalb mich das interessiert, sondern einfach, weil man das vor allem bei Hashfunktionen oft braucht. Grob gesagt, in meinem Algorithmus wird ein 2 KB großer Schlüssel verwendet, aufgespalten, mit Nachrichtenblöcken verrechnet, dann Linksshift um 32 Zeichen, dann Schlüssel auf Nachrichtenlänge expandiert, dann XOR-Verknüpfung, das ganze mit 512 bit Blockgröße und in 2048 Runden. Ich bin aber noch nicht fertig. Vor allem arbeite ich daran, eine Headerdatei zu schreiben, die auch für andere Zwecke verwendet werden kann.

    Hinweis:
    Ich weiß, dass es << und >> gibt, aber das funktioniert nicht bei Strings und löscht die bits, die "überlaufen", und füllt dann einfach mit Nullen auf, was alles andere als hilfreich ist. Schließlich soll man die Nachricht wieder entschlüsseln können.



  • CrazyGriefer1337 schrieb:

    Sorry falls ich dumme Fragen stelle

    Du hast gar keine Frage gestellt.



  • Ja, habe ich gar nicht gemerkt.
    Entschuldigung dafür. Habe den Beitrag inzwischen bearbeitet.



  • Ich frage mich nun:
    - du hast ein String-Beispiel, wo du ein Zeichen von vorne nach hinten schiebst.
    - du redest von "Linksshift um 32 Bit über alle Blöcke" - was soll das sein?
    - im Erklärungsversuch danach sprichst du von "Linksshift um 32 Zeichen". Was ist ein Shift um 1 Zeichen, was ist ein "Zeichen"?

    Irgendwie ist mir unklar, was du genau machen willst bzw. wo du Probleme hast.



  • Was du suchst, nennt sich rotating shift. Wenn du das nicht nur auf Integers, sondern beliebig langen Zeichenketten anwenden willst, musst du das eben "manuell" machen. Wenn du nur um Vielfache von 8 shiftest, ist es trivial: Bytes nach vorne verschieben und die vorne entfernten entsprechend hinten wieder hinschreiben.



  • Ok, danke.
    Ich werde versuchen, das jetzt in C++ zu implementieren. Mir fällt jetzt auch auf, dass es trivial ist, aber irgendwie wusste ich weder ein noch aus.


Log in to reply