[Veranschaulichung des Public-Key-Verfahrens]

KRYPTOLOGIE

Einstiegsaufgabe Lösung Aufgabe 4

[Veranschaulichung des Public-Key-Verfahrens]

Lösung Aufgabe 4 in Coffeescript:

(ausführbar in der IDE Pencilcode)

	
# PROGRAM caesar_oo
class Satz_Klasse
  constructor: ->
   @satz = "Startsatz"

  eingeben: (satz) ->
   @satz = satz

  ausgeben: () ->
   write @satz

  caesarverschluesseln: (versatz) ->
   verschluesselter_satz = ""
   laenge = @satz.length
   stelle = 0

   while stelle < laenge
    asciizahl = @satz.charCodeAt stelle
    asciizahl = 
      asciizahl + versatz
    zeichen=String.fromCharCode(asciizahl)
    verschluesselter_satz = 
      verschluesselter_satz + zeichen
    stelle = stelle + 1
   @satz = verschluesselter_satz

  caesarentschluesseln: (versatz) ->
   entschluesselter_satz = ""
   laenge = @satz.length
   stelle= 0

   while stelle < laenge
    asciizahl = @satz.charCodeAt stelle
    asciizahl = 
      asciizahl - versatz
    zeichen=String.fromCharCode(asciizahl)
    entschluesselter_satz = 
      entschluesselter_satz + zeichen
    stelle = stelle + 1
   @satz = entschluesselter_satz


write "-----------------------------------"
write "Ein kleines Programm zur Demon-"
write "stration der Caesar-Verschlüsselung"
write "-----------------------------------"
write "~"

satz = new Satz_Klasse
codewort = ""
versatz = 6

await read "Bitte Satz eingeben: ", 
  defer eingabe
satz.eingeben(eingabe)

write("Unverschluesselt:")
satz.ausgeben()
write "~"

satz.caesarverschluesseln versatz
write("Verschluesselt: ")
satz.ausgeben()
satz.caesarentschluesseln versatz
write("Unverschluesselt: ")
satz.ausgeben()

Lösung Aufgabe 4 in Coffeescript:

(ausführbar in der IDE Pencilcode)

	
# PROGRAM caesar_oo
class Satz_Klasse
  constructor: ->
   @satz = "Startsatz"

  eingeben: (satz) ->
   @satz = satz

  ausgeben: () ->
   write @satz

  caesarverschluesseln: (versatz) ->
   verschluesselter_satz = ""
   laenge = @satz.length
   stelle = 0

   while stelle < laenge
    asciizahl = @satz.charCodeAt stelle
    asciizahl = asciizahl + versatz
    zeichen = String.fromCharCode(asciizahl)
    verschluesselter_satz = verschluesselter_satz + zeichen
    stelle = stelle + 1
   @satz = verschluesselter_satz

  caesarentschluesseln: (versatz) ->
   entschluesselter_satz = ""
   laenge = @satz.length
   stelle= 0

   while stelle < laenge
    asciizahl = @satz.charCodeAt stelle
    asciizahl = asciizahl - versatz
    zeichen = String.fromCharCode(asciizahl)
    entschluesselter_satz = entschluesselter_satz + zeichen
    stelle = stelle + 1
   @satz = entschluesselter_satz


console.log "Ein kleines Programm zur Demonstration"
console.log "der Caesar-Verschlüsselung"

write "-----------------------------------------------------------------"
write "\n\n\n\n"
write "Ein kleines Programm zur Demonstration der Caesar-Verschlüsselung"
write "-----------------------------------------------------------------"
write "~"

satz = new Satz_Klasse
codewort = ""
versatz = 6

await read "Bitte Satz eingeben: ", defer eingabe
satz.eingeben(eingabe)

write("Unverschluesselt:")
satz.ausgeben()
write "~"

satz.caesarverschluesseln versatz
write("Verschluesselt: ")
satz.ausgeben()
satz.caesarentschluesseln versatz
write("Unverschluesselt: ")
satz.ausgeben()

Anmerkung:
Objektorientierung und Coffeescript

Vergleicht man die imperativ-prozedurale und die objektorientierte Lösung, fällt die unterschiedliche Syntax der imperativ-prozeduralen Prozeduren und Funktionen gegenüber den objektorientierten Operationen (Methoden) auf. Auch der Aufruf der ent­spre­chen­den Pro­ze­du­ren/Funk­tio­nen bzw. Operationen ist unterschiedlich. Beispielsweise dürfen in der objektorientieren Variante leere Klammern beim Aufruf nicht fehlen.
Leider sind die Fehlermeldungen in der objektorientierten Version nicht immer 'hilfreich'. Gelegentlich fehlen sie ganz! Beispielsweise wird bei fehlenden leeren Klammern beim Aufruf keine Fehlermeldung gegeben, sondern die Anweisung wird einfach nicht ausgeführt (zumindest in Pencilcode).
Das ist zweifelsfrei nicht 'glücklich'.

Da nach meiner Einschätzung Coffeescript eine gute Alternative fü die Sekundarstufe I ist, dürfte diese Kritik für den Unterricht keine grosse Rolle spielen, da in der Sek I meines Erachtes in erster Linie die imperativ-prozedurale Variante von Bedeutung ist.