Lerne und übe ABAP. In der ABAP-Übung „Atbash Cipher“ implementierst Du ein ABAP-Programm, um das Atbash-Chiffre abzubilden. Dabei handelt es sich um ein Verschlüsselungssystem aus dem Nahen Osten. Es gibt 40 geniale ABAP Übungen auf exercism. Du kannst diese Übung entweder in Deinem SAP-System ausprobieren oder Dich kostenlos auf der Plattform anmelden und die Übung absolvieren. Du kannst Dir sogar Lösungen von anderen Nutzen ansehen und dadurch Deine Lösung vergleichen.
Aufgabenstellung
Erstelle eine Implementierung der Atbash-Chiffre, eines alten Verschlüsselungssystems aus dem Nahen Osten.
Die Atbash-Chiffre ist eine einfache Substitutions-Chiffre, bei der alle Buchstaben des Alphabets vertauscht werden, so dass das resultierende Alphabet verkehrt herum ist. Der erste Buchstabe wird durch den letzten Buchstaben ersetzt, der zweite durch den vorletzten und so weiter.
Eine Atbash-Chiffre für das lateinische Alphabet sähe wie folgt aus:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba
Es handelt sich um eine sehr schwache Chiffre, da es nur einen möglichen Schlüssel gibt und es sich um eine einfache monoalphabetische Substitutions-Chiffre handelt. Zur Zeit der Chiffre dürfte dies jedoch kein Problem gewesen sein.
Der Chiffriertext wird in Gruppen fester Länge geschrieben, die traditionelle Gruppengröße beträgt 5 Buchstaben, und Satzzeichen sind ausgeschlossen. Dies soll es schwieriger machen, Dinge anhand von Wortgrenzen zu erraten.
Beispiele:
- Verschlüsselung test ergibt gvhg
- Dekodierung gvhg ergibt test
- Dekodierung gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt ergibt thequickbrownfoxjumpsoverthelazydog
Ausführliche Informationen findest Du im Wikipedia-Artikel.
Beispiel Programmierung
CLASS zcl_atbash_cipher DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. METHODS decode IMPORTING cipher_text TYPE string RETURNING VALUE(plain_text) TYPE string . METHODS encode IMPORTING plain_text TYPE string RETURNING VALUE(cipher_text) TYPE string . PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS zcl_atbash_cipher IMPLEMENTATION. METHOD decode. DATA: lv_plain type string value 'zyxwvutsrqponmlkjihgfedcba', lv_cipher type string value 'abcdefghijklmnopqrstuvwxyz', lv_offset type i, lv_text type c length 1. DATA(lv_input_text) = cipher_text. REPLACE ALL OCCURENCES OF REGEX '[^\w\*]' in lv_input_text with ''. TRANSLATE lv_input_text TO LOWER CASE. CONDENSE lv_input_text NO-GAPS. DATA(lv_len_text) = strlen( lv_input_text ). DATA lv_counter TYPE i VALUE 0. DO lv_len_text TIMES. lv_text = lv_input_text+lv_counter(1). FIND FIRST OCCURRENCE OF lv_text IN lv_plain MATCH OFFSET lv_offset. IF lv_offset = -1. lv_text = lv_text. else. lv_text = lv_cipher+lv_offset(1). endif. lv_counter = lv_counter + 1. clear lv_offset. lv_offset = -1. plain_text = |{ plain_text }{ lv_text }|. ENDDO. ENDMETHOD. METHOD encode. DATA: lv_plain type string value 'abcdefghijklmnopqrstuvwxyz', lv_cipher type string value 'zyxwvutsrqponmlkjihgfedcba', lv_offset type i, lv_text type c length 1. data(lv_input_text) = plain_text. REPLACE ALL OCCURENCES OF REGEX '[^\w\*]' in lv_input_text with ''. TRANSLATE lv_input_text TO LOWER CASE. CONDENSE lv_input_text NO-GAPS. DATA(lv_len_input) = strlen( lv_input_text ). DATA lv_counter TYPE i VALUE 0. DO lv_len_input TIMES. lv_text = lv_input_text+lv_counter(1). FIND FIRST OCCURRENCE OF lv_text IN lv_plain MATCH OFFSET lv_offset. IF lv_offset = -1. lv_text = lv_text. else. lv_text = lv_cipher+lv_offset(1). endif. cipher_text = |{ cipher_text }{ lv_text }|. DATA(lv_cipher_len_text) = cipher_text. CONDENSE lv_cipher_len_text NO-GAPS. DATA(lv_cipher_len) = strlen( lv_cipher_len_text ) MOD 5. IF ( lv_cipher_len = 0 ). cipher_text = |{ cipher_text }| & | |. ENDIF. lv_counter = lv_counter + 1. CLEAR lv_offset. lv_offset = -1. ENDDO. CONDENSE cipher_text. ENDMETHOD. ENDCLASS.
Erklärung
Hier wird eine Klasse mit dem Namen zcl_atbash_cipher definiert. Die Klasse verwendet die Atbash-Verschlüsselungstechnik, um Texte zu verschlüsseln und zu entschlüsseln.
Die Klasse enthält zwei öffentliche Methoden decode und encode, die jeweils einen verschlüsselten Text (cipher_text) oder einen Klartext (plain_text) als Eingabe erwarten und den entsprechenden Text zurückgeben.
Im Methodenblock decode wird der verschlüsselte Text (cipher_text) bereinigt und in Kleinbuchstaben umgewandelt. Anschließend wird der Text Buchstabe für Buchstabe durch die entsprechenden Buchstaben im Klartext ersetzt, indem die Offset-Position des jeweiligen Buchstabens im Klartext ermittelt wird.
Im Methodenblock encode wird der Klartext (plain_text) bereinigt und in Kleinbuchstaben umgewandelt. Anschließend wird der Text buchstabenweise durch die entsprechenden Buchstaben des verschlüsselten Textes ersetzt, indem die Offsetposition des jeweiligen Buchstabens im Klartext ermittelt wird. Schließlich wird der verschlüsselte Text in Blöcke von 5 Buchstaben aufgeteilt.
Diese Klasse kann zum Ver- und Entschlüsseln von Texten verwendet werden, indem ein Objekt der Klasse erzeugt und die entsprechenden Methoden aufgerufen werden.
Über den Autor
Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.
ERP UP unterstützen
Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.