Как сделать шифрование простой заменой на PHP?
В образовательных целях делаю шифрование простой заменой на php.
const LETTERS = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
const CODEMAP = "ЯВМЭУЫШТЬЖОЕЁНХСИЧЗЦПЩАЪКРЮЙЛБФГД";
function encrypt($string)
{
return str_replace(
mb_str_split(LETTERS),
mb_str_split(CODEMAP),
$string
);
}
function decrypt($string)
{
return str_replace(
mb_str_split(CODEMAP),
mb_str_split(LETTERS),
$string,
);
}
Но к сожалению не получается сделать декодирование строки:
$str = encrypt("ПРИВЕТ КАК ДЕЛА?");
echo $str; // "ИКЖАЛЙ ЕДЕ ПЛЁД?"
echo decrypt($str); // "УЧУХЫЪ ЧЯЧ УЫЫЯ?"
UPD: Использую кодировку utf-8, версия PHP 8.0
Ответы (1 шт):
Автор решения: KAGG Design
→ Ссылка
Вот рабочий код.
const LETTERS = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
const CODEMAP = "ЯВМЭУЫШТЬЖОЕЁНХСИЧЗЦПЩАЪКРЮЙЛБФГД";
$str = strtr( 'ПРИВЕТ КАК ДЕЛА?', LETTERS, CODEMAP );
echo $str . "\n";
echo strtr( $str, CODEMAP, LETTERS ) . "\n";
echo mb_internal_encoding() . "\n";
Вот результат выполнения.
UPDATE
Вот код, который работает для любых символов.
const LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
const CODEMAP = 'mтЬJЁrФYQорЛДфмhсSТУXkWзqFVKхЖpХРНlЮyедiКnDбRСЩйЗeCgBxЕЙdЯЪПTOjкsжыvUaЧbEВfАGиБcчэNвAъёwщHацuгtЦЭОPШуZМЫzoлянLшИIMГюьп';
$letters_arr = mb_str_split( LETTERS );
$codemap_arr = mb_str_split( CODEMAP );
$str = strtr( 'ПРИВЕТ КАК ДЕЛА?', array_combine( $letters_arr, $codemap_arr ) );
echo $str . "\n";
echo strtr( $str, array_combine( $codemap_arr, $letters_arr ) ) . "\n";
Результат:
DбЮхХС еVе pХдV?
ПРИВЕТ КАК ДЕЛА?
Process finished with exit code 0
