Как учитывать пробелы и числа в шифре Цезаря?

Я пытаюсь зашифровать сообщение с помощью CAESAR'S CIPHER, и шифрование также работает правильно. Но теперь я хотел бы знать, как учитывать пробелы и числа в зашифрованной строке.

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;
?>

person Ayan    schedule 05.07.2016    source источник
comment
$n — строковый символ, верно? Используйте in_array($n, array('1','2','3','4','5',...)); это сказало, что я бы определил ваш массив плохих символов вне цикла, а затем просто посмотрел, является ли он одним из них, верно?   -  person ArtisticPhoenix    schedule 05.07.2016
comment
Да $n — строковый символ. Итак, где вы предлагаете мне использовать in_array?   -  person Ayan    schedule 05.07.2016
comment
Ну, я не знаю, что вы хотите с ними делать, но вы можете найти их, сравнив каждый символ с массивом плохих символов, поэтому, если вы поместите if внутри цикла и т. д. и т. д., если вы хотите больше производительности, вы также можно использовать strpos('123456', $n)... php.net/ руководство/ru/function.strpos.php   -  person ArtisticPhoenix    schedule 05.07.2016
comment
На самом деле я хотел бы зашифровать сообщение, например, Я ЛЮБЛЮ КОД 321 в этом шифре. Но пока я могу делать только ILOVECODE.   -  person Ayan    schedule 05.07.2016
comment
Ну, очевидный ответ — добавить их в ваш массив альфа-символов. правильно. Я бы изменил %26 mod 26, чтобы использовать количество этого массива... хотя   -  person ArtisticPhoenix    schedule 05.07.2016
comment
в массиве alph как учитывать пробел? используя ''ИЛИ''   -  person Ayan    schedule 05.07.2016
comment
вы не можете поместить '' в свой массив? пространство..   -  person ArtisticPhoenix    schedule 05.07.2016
comment
Хммм.. Спасибо, у меня должен быть здравый смысл. Виноват.   -  person Ayan    schedule 05.07.2016
comment
Еще одна вещь, я не понял вас об изменении% 26?   -  person Ayan    schedule 05.07.2016
comment
26 количество альфа-символов зависит от длины вашего альфа-массива. Быть легко взломанным (shift cypher)   -  person ArtisticPhoenix    schedule 05.07.2016


Ответы (1)


Так

<?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;
?>

Добавьте их в свой список и сделайте $mod динамическим на основе количества, я бы добавил strtoupper для учета строчных букв.

Тем не менее, это не ваша домашняя работа, не так ли? Вы можете поместить туда все, что захотите, если это не дубликат, если вы хотите проверить наличие дубликатов, просто

   $alphabet = array_unique($alphabet);

Чтобы быть уверенным, что вы никогда не помещаете дубликат в массив, но это может быть излишним.

person ArtisticPhoenix    schedule 05.07.2016
comment
Нет, это не так, я тоже не компьютерный студент. Я изучаю сценарии самостоятельно, с помощью stackoverflow и google и, очевидно, у таких людей, как вы. - person Ayan; 05.07.2016
comment
Получите хороший ide, такой как NetBeans или Eclipse PDT, который вам поможет. Я занимаюсь PHP около 7 лет и много занимаюсь криптографией. - person ArtisticPhoenix; 05.07.2016
comment
Ok. Laravel тоже IDE?? - person Ayan; 05.07.2016
comment
нет, это фреймворк, IDE — это интеллектуальный редактор с автозавершением кода и т. д. - person ArtisticPhoenix; 05.07.2016
comment
Хорошо, большое спасибо. :) Однозначно перейду на IDE от dreamweaver. - person Ayan; 05.07.2016
comment
Да, IDE похожа на встроенную документацию. - person ArtisticPhoenix; 05.07.2016
comment
Во время расшифровки я должен сохранить $n = strtoupper($n); или делать строчные вещи? - person Ayan; 05.07.2016
comment
Вы не можете использовать их в нижнем регистре, если вы хотите обрабатывать строчные буквы, вам придется добавить их в массив. Вы теряете эти данные, когда прописываете их, и нет никакого способа узнать, что это было позже. Таким образом, вы можете добавить их все, а затем удалить верхний регистр, это будет лучший способ. Вы знаете, что я имею в виду, нет никакого способа узнать, использовали ли вы его в верхнем регистре или нет, когда расшифровываете его. - person ArtisticPhoenix; 05.07.2016