<?php
error_reporting(-1);
mb_internal_encoding('utf-8');

$code = array(
'а' => '1', 'б' => '2', 'в' => '3', 'г' => '4',
'д' => '5', 'е' => '6', 'ё' => '7', 'ж' => '8',
'з' => '9', 'и' => '0', 'й' => '!', 'к' => '@',
'л' => '#', 'м' => '$', 'н' => '%', 'о' => '^',
'п' => '&', 'р' => '*', 'с' => '(', 'т' => ')',
'у' => '-', 'ф' => '_', 'х' => '=', 'ц' => '+',
'ч' => '[', 'ш' => ']', 'щ' => '{', 'ъ' => '}',
'ы' => '|', 'ь' => '~', 'э' => ':', 'ю' => ';',
'я' => '?', '.' => '.', ' ' => ' '
);

$decode = array_flip($code);

$text = 'нас предали. явка провалена.';
$cipher = strtr($text, $code);
$decoded = strtr($cipher, $decode);

echo "Оригинал: {$text}\n";
echo "Шифровка: {$cipher}\n";
echo "Расшифровка: {$decoded}\n";

$alphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
$testCipher = strtr($alphabet, $code);
$testBack = strtr($testCipher, $decode);
echo ($testBack === $alphabet)
? "Алфавит шифруется и расшифровывается корректно\n"
: "ОШИБКА расшифровки: {$testBack}\n";