Евгений Платонов
Мастер
(1187)
3 недели назад
Чтобы пробелы между словами не шифровались, нужно проверять, является ли текущий символ пробелом. Если да, то не применять шифрование к нему. Вот исправленный код:
$text = 'caesar cipher';
$shift = 18;
$encryption = '';
$decryption = '';
for ($i = 0; $i < strlen($text); $i++) {
$symbol = ord($text[$i]);
// Если текущий символ не пробел, применяем шифрование
if ($symbol !== ord(' ')) {
$symbol += $shift;
if ($symbol > 255) {
$symbol -= 255;
}
}
$encryption .= chr($symbol);
};
echo $encryption . PHP_EOL;
for ($i = 0; $i < strlen($encryption); $i++) {
$symbol = ord($encryption[$i]);
// Если текущий символ не пробел, применяем дешифрование
if ($symbol !== ord(' ')) {
$symbol -= $shift;
if ($symbol < $shift) {
$symbol = 255 - $shift;
}
}
$decryption .= chr($symbol);
};
echo $decryption . PHP_EOL;
Теперь программа будет шифровать и дешифровать только символы, отличные от пробела.
$text = 'caesar cipher';
$shift = 18;
$encryption = '';
$decryption = '';
for ($i = 0; $i < strlen($text); $i++) {
$symbol = ord($text[$i]) + $shift;
if ($symbol > 255) {
$symbol = $symbol - 255;
}
$encryption = $encryption.chr($symbol);
};
echo $encryption . PHP_EOL;
for ($i = 0; $i < strlen($encryption); $i++) {
$symbol = ord($encryption[$i]) - $shift;
if ($symbol < $shift) {
$symbol = 255 - $shift;
}
$decryption = $decryption.chr($symbol);
};
echo $decryption . PHP_EOL;