шифрование — Vigenére Cipher с числами в переполнении стека

Как я могу также зашифровать / расшифровать числа, используя шифр Vigenére?

Код:

 $str = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s";
$key = "RANDOM KEY";

printf("Text: %s\n", $str);
printf("key:  %s\n", $key);

$cod = encipher($str, $key, true); printf("Code: %s\n", $cod);
$dec = encipher($cod, $key, false); printf("Back: %s\n", $dec);

function encipher($src, $key, $encoder)
{
$key = strtoupper($key);
$src = strtoupper($src);
$dest = '';

/* strips non-letters */
for($i = 0; $i <= strlen($src); $i++) {
$char = substr($src, $i, 1);
if(ctype_upper($char)) {
$dest .= $char;
}
}

for($i = 0; $i <= strlen($dest); $i++) {
$char = substr($dest, $i, 1);
if(!ctype_upper($char)) {
continue;
}
$dest = substr_replace($dest,
chr (
ord('A') +
($encoder
? ord($char) - ord('A') + ord($key[$i % strlen($key)]) - ord('A')
: ord($char) - ord($key[$i % strlen($key)]) + 26
) % 26
)
, $i, 1);
}

return $dest;
}

Могу ли я получить способ сохранить цифры после удаления неалфавитных символов, и все будет работать нормально? (Может быть, использовать регулярные выражения как более простой способ)

0

Решение

Vigenère использует квадратную сетку для шифрования и дешифрования. С буквами он использует Сетка 26 х 26. И с буквами, и с цифрами он использует сетку 36 х 36. С байтами он использует сетку 256 x 256. Только для цифр используйте сетку 10 x 10 и ключ, состоящий только из цифр.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]