# Public-Key-Verschluesselungssystem # (es werden nur globale Variablen verwendet) # Arno Pasternak, 1.7.2009/2.12.2009 # ************************* Prozeduren *************** proc warten_auf_enter {} { puts "" puts "Weiter: " gets stdin weiter puts "" } proc info_ausgeben {} { puts "Mit diesem Progamm kann die Public-Key-Verschluesselung" puts "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 "Schluessel) 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 {} { public_key_verschluesseln satz_ausgabe } proc satz_entschluesseln {} { public_key_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 schluessel_eingeben {} { global schluessel puts "" puts "Bitte Schluesselzahl eingeben:" gets stdin schluessel 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 public_key_verschluesseln {} { global satz global schluessel set internercode 123 set stelle 0 set codestelle 0 set internercodestelle 0 set verschluesselter_satz "" set laenge [string length $satz] set codelaenge [string length $schluessel] set internercodelaenge [string length $internercode] while {$stelle < $laenge} { set zeichen [string index $satz $stelle] scan $zeichen %c asciizahl set codezahlzeichen [string index $schluessel $codestelle] scan $codezahlzeichen %c codezahl set codezahl [expr $codezahl -48] set internercodezahlzeichen \ [string index $internercode $internercodestelle] scan $internercodezahlzeichen %c internercodezahl set internercodezahl [expr $internercodezahl -48] set summencodezahl [expr $codezahl + $internercodezahl] if {$summencodezahl > 9} { set summencodezahl [expr $summencodezahl - 10] } set asciizahl [expr $asciizahl + $summencodezahl] set zeichen [format %c $asciizahl] set verschluesselter_satz $verschluesselter_satz$zeichen set stelle [expr $stelle + 1] set codestelle [expr $codestelle +1] set internercodestelle [expr $internercodestelle +1] if {$codestelle == $codelaenge} { set codestelle 0 } if {$internercodestelle == $internercodelaenge} { set internercodestelle 0 } } set satz $verschluesselter_satz } proc public_key_entschluesseln {} { global satz global schluessel set stelle 0 set codestelle 0 set entschluesselter_satz "" set laenge [string length $satz] set codelaenge [string length $schluessel] while {$stelle < $laenge} { set zeichen [string index $satz $stelle] scan $zeichen %c asciizahl set codezahlzeichen [string index $schluessel $codestelle] scan $codezahlzeichen %c codezahl set codezahl [expr $codezahl -48] set asciizahl [expr $asciizahl - $codezahl] set zeichen [format %c $asciizahl] set entschluesselter_satz $entschluesselter_satz$zeichen set stelle [expr $stelle + 1] set codestelle [expr $codestelle +1] if {$codestelle == $codelaenge} { set codestelle 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 "Schluesselzahl 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 {schluessel_eingeben} if {$wahl == 9} then {SMS_loeschen} } # ************************* Ende des Verschlüsselungprogrammes ***************