# VIGENERE-Verschluesselungssystem # (unter Verwendung von Schnittstellen) # (der 'Server-Pfad' wird als globale Variable verwendet) # Arno Pasternak, 1.7. 2009 # # ************************* Prozeduren *************** proc warten_auf_enter {} { puts "" puts "Weiter: " gets stdin weiter puts "" } proc info_ausgeben {} { puts "Mit diesem Progamm kann die Verschlüsselung" puts "nach Vigenere einzeln oder in einer Gruppe " puts "ausprobiert werden." puts "" puts "Zu Beginn wird eine Zahl als Adresse erfragt." puts "Wird die Nummer beispielsweise mit 100 eingegeben," puts "heisst der Computer dann 'R100'" puts "Es können nun Kurzmitteilungen" puts "(1 Zeile Information) eingegeben werden." puts "Diese kann (mit einem zuvor eingegeben" puts "Codewort) verschlüsselt werden," puts "gespeichert und geladen werden." puts "Als Dateinamen werden immer die Kombinationen:" puts "'RzieladresseRquelladresse.SMS'" puts "verwendet." puts "Es können nur die Dateien geladen werden," puts "die mit dem eigenen Computernamen beginnen." puts "Solche Dateien können auch gelöscht werden." puts "(Der Pfad für die Dateien kann im Programm" puts "festgelegt (verändert) werden." puts "Bei einer Arbeit von Gruppen muss dies " puts "natürlich ein gemeinsam erreichbarer sein.)" warten_auf_enter } proc satz_eingabe {satz} { puts "" puts "Bitte den gewünschten Satz eingeben:" upvar $satz eingabe gets stdin eingabe puts "" satz_ausgabe $eingabe } proc satz_ausgabe {satz} { puts "" puts "------------------------------------------------" puts "Der aktuelle Satz lautet: $satz" puts "------------------------------------------------" puts "" } proc satz_verschluesseln {satz codewort} { upvar $satz klartext vigenere_verschluesseln klartext $codewort puts "" satz_ausgabe $klartext } proc satz_entschluesseln {satz codewort} { upvar $satz klartext vigenere_entschluesseln klartext $codewort puts "" satz_ausgabe $klartext } proc satz_laden {satz adresse} { global pfad upvar $satz einlesen puts "" puts "Eine SMS von welcher Adresse soll gelesen werden?" gets stdin quelladresse set file [open "$pfad/R${adresse}R$quelladresse.SMS" {RDONLY}] gets $file einlesen close $file puts "" satz_ausgabe $einlesen } proc satz_speichern {satz adresse} { global pfad puts "" puts "An welche Zieladresse soll gesendet werden?" gets stdin zieladresse set file [open "$pfad/R${zieladresse}R$adresse.SMS" {WRONLY CREAT}] puts $file $satz close $file } proc codewort_eingeben {codewort} { upvar $codewort code puts "" puts "Bitte Codewort eingeben:" gets stdin code puts "" } proc SMS_verzeichnis_ausgeben {adresse} { global pfad set aktueller_pfad [pwd] cd $pfad puts "" puts "Folgende SMS liegen vor:" puts [glob -nocomplain *.SMS] puts "" puts "Folgende SMS liegen für mich vor: " puts [glob -nocomplain R$adresse*.SMS] puts "" puts "" cd $aktueller_pfad } proc SMS_loeschen {adresse} { global pfad puts "Von welcher Adresse soll die SMS gelöscht werden?" gets stdin quelladresse file delete $pfad/R${adresse}R$quelladresse.SMS puts "" } proc vigenere_verschluesseln {klartext codewort} { upvar $klartext satz set stelle 0 set codewortstelle 0 set verschluesselter_satz "" set codewort [string toupper $codewort] set laenge [string length $satz] set codewortlaenge [string length $codewort] while {$stelle < $laenge} { set zeichen [string index $satz $stelle] scan $zeichen %c asciizahl set verschluesselungszeichen [string index $codewort $codewortstelle] scan $verschluesselungszeichen %c verschluesselungszahl set verschluesselungszahl [expr $verschluesselungszahl -64] set asciizahl [expr $asciizahl + $verschluesselungszahl] set zeichen [format %c $asciizahl] set verschluesselter_satz $verschluesselter_satz$zeichen set stelle [expr $stelle + 1] set codewortstelle [expr $codewortstelle +1] if {$codewortstelle == $codewortlaenge} { set codewortstelle 0 } } set satz $verschluesselter_satz } proc vigenere_entschluesseln {klartext codewort} { upvar $klartext satz set stelle 0 set codewortstelle 0 set entschluesselter_satz "" set codewort [string toupper $codewort] set laenge [string length $satz] set codewortlaenge [string length $codewort] while {$stelle < $laenge} { set zeichen [string index $satz $stelle] scan $zeichen %c asciizahl set entschluesselungszeichen [string index $codewort $codewortstelle] scan $entschluesselungszeichen %c entschluesselungszahl set entschluesselungszahl [expr $entschluesselungszahl -64] set asciizahl [expr $asciizahl - $entschluesselungszahl] set zeichen [format %c $asciizahl] set entschluesselter_satz $entschluesselter_satz$zeichen set stelle [expr $stelle + 1] set codewortstelle [expr $codewortstelle +1] if {$codewortstelle == $codewortlaenge} { set codewortstelle 0 } } set satz $entschluesselter_satz } # ************************* Ende der Prozeduren *************** puts \n\n\n\n set pfad "server" puts "VIGENERE-Verschluesselungssystem" puts "" info_ausgeben puts "" puts "Eigene Adresse (z.B. 312 für R312) eingeben:" gets stdin adresse puts "" puts "" set codewort "" set satz "" set wahl -1 while {$wahl != 0} { puts "===========================" puts " Client: R$adresse" puts "===========================" puts " Menü" puts "===========================" puts "" puts "Informationen ausgeben: i" puts "" puts "Satz eingeben: 1" puts "Satz ausgeben: 2" puts "Satz laden : 3" puts "Satz speichern: 4" puts "Satz verschlüsseln: 5" puts "Satz entschlüsseln: 6" puts "SMS Verzeichnis ausgeben: 7" puts "Codewort eingeben: 8" puts "SMS löschen: 9" puts "Ende: 0" puts "" puts "" puts "Eingabe:" gets stdin wahl puts "" if {$wahl == "i"} then {info_ausgeben} if {$wahl == 1} then {satz_eingabe satz} if {$wahl == 2} then {satz_ausgabe $satz} if {$wahl == 3} then {satz_laden satz $adresse} if {$wahl == 4} then {satz_speichern $satz $adresse} if {$wahl == 5} then {satz_verschluesseln satz $codewort} if {$wahl == 6} then {satz_entschluesseln satz $codewort} if {$wahl == 7} then {SMS_verzeichnis_ausgeben $adresse} if {$wahl == 8} then {codewort_eingeben codewort} if {$wahl == 9} then {SMS_loeschen $adresse} } # ************************* Ende des Verschlüsselungprogrammes ***************