# VIGENERE-Verschluesselungssystem # (es werden nur globale Variablen 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 Verschluesselung" 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 koennen nun Kurzmitteilungen" puts "(1 Zeile Information) eingegeben werden." puts "Diese kann (mit einem zuvor eingegeben" puts "Codewort) verschluesselt werden," puts "gespeichert und geladen werden." puts "Als Dateinamen werden immer die Kombinationen:" puts "'RzieladresseRquelladresse.SMS'" puts "verwendet." puts "Es koennen nur die Dateien geladen werden," puts "die mit dem eigenen Computernamen beginnen." puts "Solche Dateien koennen auch geloescht werden." puts "(Der Pfad fuer die Dateien kann im Programm" puts "festgelegt (veraendert) werden." puts "Bei einer Arbeit von Gruppen muss dies " puts "natuerlich ein gemeinsam erreichbarer sein.)" warten_auf_enter } proc satz_eingabe {} { global satz puts "" puts "Bitte den gewuenschten Satz eingeben:" gets stdin satz puts "" satz_ausgabe } proc satz_ausgabe {} { global satz puts "" puts "------------------------------------------------" puts "Der aktuelle Satz lautet: $satz" puts "------------------------------------------------" puts "" } proc satz_verschluesseln {} { vigenere_verschluesseln satz_ausgabe } proc satz_entschluesseln {} { vigenere_entschluesseln satz_ausgabe } proc satz_laden {} { global satz adresse pfad 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 satz close $file puts "" satz_ausgabe } proc satz_speichern {} { global satz adresse 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 {} { global codewort puts "" puts "Bitte Codewort eingeben:" gets stdin codewort puts "" } proc SMS_verzeichnis_ausgeben {} { global adresse global pfad set aktueller_pfad [pwd] cd $pfad puts "" puts "Folgende SMS liegen vor:" puts [glob -nocomplain *.SMS] puts "" puts "Folgende SMS liegen fuer mich vor: " puts [glob -nocomplain R$adresse*.SMS] puts "" puts "" cd $aktueller_pfad } proc SMS_loeschen {} { global adresse pfad puts "Von welcher Adresse soll die SMS geloescht werden?" gets stdin quelladresse file delete $pfad/R${adresse}R$quelladresse.SMS puts "" } proc vigenere_verschluesseln {} { global satz global codewort 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 {} { global satz global codewort 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 " Menue" 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 verschluesseln: 5" puts "Satz entschluesseln: 6" puts "SMS Verzeichnis ausgeben: 7" puts "Codewort eingeben: 8" puts "SMS loeschen: 9" puts "Ende: 0" puts "" puts "" puts "Eingabe:" gets stdin wahl puts "" if {$wahl == "i"} then {info_ausgeben} if {$wahl == 1} then {satz_eingabe} if {$wahl == 2} then {satz_ausgabe} if {$wahl == 3} then {satz_laden} if {$wahl == 4} then {satz_speichern} if {$wahl == 5} then {satz_verschluesseln} if {$wahl == 6} then {satz_entschluesseln} if {$wahl == 7} then {SMS_verzeichnis_ausgeben} if {$wahl == 8} then {codewort_eingeben} if {$wahl == 9} then {SMS_loeschen} } # ************************* Ende des Verschlüsselungprogrammes ***************