The Net Wizard HauptseiteISP SetupNetzwerkeVelotourenSoftwareKryptografieVaria

Enigma-Simulation

Im Rahmen einer Sendung des Hackerfunkes über die Geschichte der Kryptographie, habe ich mich mit der Verschlüsselungsmaschine Enigma, welche von den Deutschen im zweiten Weltkrieg eingesetzt wurde, beschäftigt.
Daraus ist ein kleines php-Script entstanden, das eine derartige Verschlüsselung simuliert. Der Code dazu sieht folgendermassen aus:
    001:
    002:
    003:
    004:
    005:
    006:
    007:
    008:
    009:
    010:
    011:
    012:
    013:
    014:
    015:
    016:
    017:
    018:
    019:
    020:
    021:
    022:
    023:
    024:
    025:
    026:
    027:
    028:
    029:
    030:
    031:
    032:
    033:
    034:
    035:
    036:
    037:
    038:
    039:
    040:
    041:
    042:
    043:
    044:
    045:
    046:
    047:
    048:
    049:
    050:
    051:
    052:
    053:
    054:
    055:
    056:
    057:
    058:
    059:
    060:
    061:
    062:
    063:
    064:
    065:
    066:
    067:
    068:
    069:
    070:
    071:
    072:
    073:
    074:
    075:
    076:
    077:
    078:
    079:
    080:
    081:
    082:
    083:
    084:
    085:
    086:
    087:
    088:
    089:
    090:
    091:
    092:
    093:
    094:
    095:
    096:
    097:
    098:
    099:
    100:
    101:
    102:
    103:
    104:
    105:
    106:
    107:
    108:
    109:
    110:
    111:
    112:
    113:
    114:
    115:
    116:
    117:
    118:
    119:
    120:
    121:
    122:
    123:
    124:
    125:
    126:
    127:
    128:
    129:
    130:
    131:
    132:
    133:
    134:
    135:
    136:
    137:
    138:
    139:
    140:
    141:
    142:
    143:
    144:
    145:
    146:
    147:
    148:
    149:
    150:
    151:
    152:
    <?php
    print "<html>";
    print 
    "<head>";
    print 
    "<title>Enigma Simulation</title>";
    print 
    "<meta name='author' content='Robert Meyer'>";
    print 
    "<meta name='description' content='Simulate encryption with Enigma'>";
    print 
    "</head>";
    print 
    "<body>";
    print 
    "<h2>Verschl&uuml;sselter Text</h2>";
    print 
    "Der verschl&uuml;sselte Text lautet:<p>";

    # Programmcode
    # Definition der fuenf Walzen
        
    $cable_w[1] = array(4,9,10,2,7,1,23,9,13,16,3,8,2,9,10,18,7,3,0,22,6,13,5,20,4,10);
        
    $cable_w[2] = array(0,8,1,7,14,3,11,13,15,18,1,22,10,6,24,13,0,15,7,20,21,3,9,24,16,5);
        
    $cable_w[3] = array(1,2,3,4,5,6,22,8,9,10,13,10,13,0,10,15,18,5,14,7,16,17,24,21,18,15);
        
    $cable_w[4] = array(4,17,12,18,11,20,3,19,16,7,10,23,5,20,9,22,23,14,1,13,16,8,6,15,24,2);
        
    $cable_w[5] = array(21,24,25,14,2,3,13,17,12,6,8,18,1,20,23,8,10,5,20,16,22,19,9,7,4,11);
        
    #echo "t0  " . $cable_w[1][1] . "<br>";
    # Definition der Umkehrwalze
        
    $cable_r1 = array(4,8,10,22,22,6,18,16,13,18,12,20,16,4,2,5,24,22,1,25,21,13,14,10,8,4);

    # Einlesen der Formulardaten
    # Das Steckbrett
        
    $v[1]=$_POST['v1'];
        
    $v[2]=$_POST['v2'];
        
    $v[3]=$_POST['v3'];
        
    $v[4]=$_POST['v4'];
        
    $v[5]=$_POST['v5'];
        
    $v[6]=$_POST['v6'];
        
    $t[1]=$_POST['t1'];
        
    $t[2]=$_POST['t2'];
        
    $t[3]=$_POST['t3'];
        
    $t[4]=$_POST['t4'];
        
    $t[5]=$_POST['t5'];
        
    $t[6]=$_POST['t6'];

    # Auswahl der Walzen
        
    $w[1]=$_POST['w1'];
        
    $w[2]=$_POST['w2'];
        
    $w[3]=$_POST['w3'];

    # Ausrichtung der Walzen
        
    $a[1]=$_POST['a1'];
        
    $a[2]=$_POST['a2'];
        
    $a[3]=$_POST['a3'];

    # Text, der verschluesselt werden soll
        
    $text=$_POST['text'];

    # Validierung der Eingaben
        
    $error="";
        
    # Array zum testen, ob ein Buchstabe mehrmals vorkommt
        
    $abc array_fill (0260);
        
    # Aenderungen der Buchstaben auf dem Hinweg
        
    $cabling_h array_fill (260);
        for (
    $i=1$i<7$i++) {
            
    $v_num_char=(ord($v[1])-97);
            
    $t_num_char=(ord($t[1])-97);
            if ( (
    $t_num_char 0) || ($t_num_char 25) ) {
                
    $error="Falsches Zeichen beim Vertauschen";
            }
            if ( (
    $abc[$v_num_char] > 0) || ($abc[$t_num_char] > 0) ){
                
    $error="Zwei Mal denselben Buchstaben vertauscht\n";
            }
            if ( 
    $v_num_char $t_num_char ) {
                
    $cabling_h[$t_num_char] = $v_num_char $t_num_char;
                
    $cabling_h[$v_num_char] = 26 $t_num_char $v_num_char;
            } else {
                
    $cabling_h[$v_num_char] = $t_num_char $v_num_char;
                
    $cabling_h[$t_num_char] = 26 $v_num_char $t_num_char;
            }
            
    $abc[$v_num_char]++;
            
    $abc[$t_num_char]++;
        }


        if ( (
    $w[1] == $w[2]) || ($w[1] == $w[3]) || ($w[3] == $w[2]) ) {
            
    $error="Zwei Mal dieselbe Walze ausgewaehlt";
        }

        for (
    $i=1$i<4$i++) {
            
    # a_num[$i] enthaelt die Stellung der Walze $i
            
    $a_num[$i] = ord($a[$i]);
            if ( (
    $a_num[$i] < 97) || ($a_num[$i] >122) ) {
                
    $error="Falsche Ausgangsstellung";
            }
            
    $a_num[$i] = $a_num[$i] - 97;
        }
        if (
    $errror != "") {
            print 
    "Fehlerhafte Eingabe<br>";
            print 
    $error;
            return(
    1);
        }

    # Parse input string
        
    $index=0;
        
    $n_chars strlen($text);
        for ( 
    $i=$i<$n_chars$i++) {
            
    $cur_char substr($text$i1);
            
    $num_char ord($cur_char);
            
    # convert uppercase to lowercase
            
    if ( ($num_char 64) && ($num_char 91) ) {
                
    $num_char $num_char 32;
            }
            
    # Satzzeichen werden zu x
            
    if ( ($cur_char == '.') || ($cur_char == ':') ||
                 (
    $cur_char == ',') || ($cur_char == ';')) {
                
    $num_char 120;
            } 
            if ( (
    $num_char 96) && ($num_char 123) ) {
                
    $num_char=$num_char-97;
                
    # Encrypt
                
    $index++;
                
    # Das Steckbrett
                
    $num_char=($num_char $cabling_h[$num_char]) % 26;
                
    # Die erste Walze
                
    $t1=$w[1];
                
    $t2 $a_num[1];
                
    $num_char = ($num_char $cable_w[$t1][$t2]) %26;
                
    # Die zweite Walze
                
    $num_char = ($num_char $cable_w[$w[2]][$a_num[2]]) %26;
                
    # Die dritte Walze
                
    $num_char = ($num_char $cable_w[$w[3]][$a_num[3]]) %26;
                
    # Umkehrwalze
                
    $num_char = ($num_char $cable_r1[$num_char]) % 26;
                
    # Jetzt kommt der weg zurueck
                # Die dritte Walze
                
    $num_char = (26 $num_char $cable_w[$w[3]][$a_num[3]]) %26;
                
    # Die zweite Walze
                
    $num_char = (26 $num_char $cable_w[$w[2]][$a_num[2]]) %26;
                
    # Die erste Walze
                
    $num_char = (26 $num_char $cable_w[$w[1]][$a_num[1]]) %26;
                
    # Das Steckbrett
                
    $alph_char chr($num_char 97);
                
    $num_char = ($num_char +  $cabling_h[$num_char]) % 26;
                
    # Nun werden die Positionen der Walzen angepasst
                
    $a_num[1] = ($a_num[1] + 1) %26;
                if ( 
    $a_num[1] == ) {
                    
    $a_num[2] = ($a_num[2] + 1) %26;
                    if ( 
    $a_num[2] == ) {
                        
    $a_num[3] = ($a_num[3] + 1) %26;
                    }
                }
                print 
    chr($num_char 97);
            } 
    # End of if clause
        
    # End of for loop

    print "</body>";
    print 
    "</html>";
    ?>

Powered by w3.css