<?php
// Заранее определенный словарь замен
$charset = [
'0' => ['abcde', 'fghij', 'klmno'],
'1' => ['pqrst', 'uvwxy', 'zabcd'],
'2' => ['efghi', 'jklmn', 'opqrs'],
'3' => ['stuvw', 'xyzab', 'cdefg'],
'4' => ['hijkl', 'mnopq', 'rstuv'],
'5' => ['wxyza', 'bcdef', 'ghijk'],
'6' => ['lmnop', 'qrstx', 'yzabc'],
'7' => ['fghij', 'klmno', 'pqrst'],
'8' => ['uvwxy', 'zabcd', 'efghi'],
'9' => ['jklmn', 'opqrs', 'stuvw'],
';' => ['pqrst', 'uvwxyz', 'abcde']
];
// Функция для шифрования
function encrypt($data, $key) {
global $charset;
$encrypted = '';
// Используем ключ для перестановки
$keyIndex = 0;
$keyLength = strlen($key);
// Проходим по каждому символу данных
foreach (str_split($data) as $char) {
if (isset($charset[$char])) {
// Случайный выбор вариации
$replacement = $charset[$char][array_rand($charset[$char])];
// Переставляем буквы в строке на основе ключа
$replacement = shiftString($replacement, $key[$keyIndex % $keyLength]);
$encrypted .= $replacement;
// Перемещаем к следующему символу ключа
$keyIndex++;
}
}
return $encrypted;
}
// Функция для расшифровки
function decrypt($data, $key) {
global $charset;
$decrypted = '';
// Используем ключ для перестановки
$keyIndex = 0;
$keyLength = strlen($key);
// Создаем обратный словарь для быстрого поиска
$reverseCharset = [];
foreach ($charset as $key => $values) {
foreach ($values as $value) {
$reverseCharset[$value] = $key;
}
}
// Проходим по каждому символу данных
$i = 0;
while ($i < strlen($data)) {
foreach (range(5, 7) as $length) {
$pair = substr($data, $i, $length);
if (isset($reverseCharset[$pair])) {
$decrypted .= $reverseCharset[$pair];
$i += $length;
break;
}
}
}
return $decrypted;
}
// Функция для сдвига строки по ключу
function shiftString($str, $keyChar) {
$shift = ord($keyChar) % 26; // сдвиг по ключу
$shifted = '';
foreach (str_split($str) as $char) {
$shifted .= chr(((ord($char) - ord('a') + $shift) % 26) + ord('a'));
}
return $shifted;
}
// Пример использования
$data = '1;2;3';
$key = 'mykey'; // Ключ для шифрования
// Шифруем данные
$encryptedData = encrypt($data, $key);
echo 'Encrypted: ' . $encryptedData . PHP_EOL; // Вывод зашифрованного текста
// Расшифровываем данные
$decryptedData = decrypt($encryptedData, $key);
echo 'Decrypted: ' . $decryptedData . PHP_EOL; // Вывод расшифрованного текста