2016-07-05 15 views
0

Ich versuche, eine Nachricht mit CAESAR'S CIPHER zu verschlüsseln und die Verschlüsselung funktioniert auch korrekt. Aber jetzt möchte ich wissen, wie man Leerzeichen und Zahlen in der zu verschlüsselnden Zeichenfolge berücksichtigt.Wie man Räume und Zahlen in Cäsars Chiffre berücksichtigt?

PHP

<?php 
//the text to be encrypted 
$plain_text='ABC'; 
echo $plain_text."<br>"; 
//letters of alphabet array 
$alphabet=array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); 
//positions of the letters in alphabet 
$flip=array_flip($alphabet); 

//plaintext array 
$plain_text=str_split($plain_text); 
$n=count($plain_text); 
$encrypted_text=''; 
for ($i=0; $i<$n; $i++){ 
    //encryption 
    $encrypted_text.=$alphabet[($flip[$plain_text[$i]]+2)%26]; 
} 

echo $encrypted_text; 
?> 
+0

$ n ist ein String-Zeichen rechts ?, verwenden Sie in_array ($ n, Array ('1', '2', '3', '4', '5', ...)); Das heißt, ich würde deine Reihe von schlechten Charakteren außerhalb der Schleife definieren, dann schaue nur, ob es einer von ihnen ist, oder? – ArtisticPhoenix

+0

Ja $ n ist ein Zeichenfolgenzeichen. Also, wo schlägst du mir vor, th in_array zu benutzen? – Ayan

+0

Nun, ich weiß nicht, was Sie mit ihnen machen wollen, aber Sie können sie finden, indem Sie jeden Charakter gegen eine Reihe von schlechten Zeichen prüfen, also wenn Sie ein if innerhalb der Schleife setzen usw. etc .. wenn Sie mehr Leistung wollen du könntest auch strpos ('123456', $ n) benutzen ... http://php.net/manual/en/function.strpos.php – ArtisticPhoenix

Antwort

0

Gefällt Ihnen dieses

<?php 
    //the text to be encrypted 
    $plain_text='ABC'; 
    echo $plain_text."<br>"; 
    //letters of alphabet array 
    $alphabet=array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
    'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1','2','3','4','5','6','7','8','9','0',' '); 
    //positions of the letters in alphabet 
    $flip=array_flip($alphabet); 
    $mod = count($alphabet); 

    //plaintext array 
    $plain_text=str_split($plain_text); 
    $n=count($plain_text); 
    $encrypted_text=''; 
    for ($i=0; $i<$n; $i++){ 
     $n = strtoupper($n); 
     //encryption 
     $encrypted_text.=$alphabet[($flip[$plain_text[$i]]+2) % $mod]; 
    } 

    echo $encrypted_text; 
?> 

sie zu Ihrer Liste hinzufügen und die $ mod dynamisch auf die Zählung basiert machen, würde ich strtoupper hinzufügen für Kleinbuchstaben zu berücksichtigen.

Das heißt, das ist nicht deine Hausaufgaben, oder? Sie können als nicht ein Duplikat setzen alles, was man so lange dort mögen, wenn Sie dann nach Duplikaten zu Fehler wollen überprüfen gerade

$alphabet = array_unique($alphabet); 

Um sicherzustellen, dass Sie nie ein Duplikat im Array setzen, aber das könnte zu viel des Guten .

+0

Nopes, es ist nicht, ich bin auch kein Computer Student. Ich lerne Scripting selbst, mit stackoverflow und google und natürlich von Leuten wie dir. – Ayan

+0

Holen Sie sich eine gute Idee wie NetBeans oder Eclipse PDT, die Ihnen helfen wird. Ich mache PHP seit ca. 7 Jahren und viel Kryptographie. – ArtisticPhoenix

+0

Ok. Ist Laravel auch eine IDE? – Ayan