Как я могу также зашифровать / расшифровать числа, используя шифр 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;
}
Могу ли я получить способ сохранить цифры после удаления неалфавитных символов, и все будет работать нормально? (Может быть, использовать регулярные выражения как более простой способ)
Vigenère использует квадратную сетку для шифрования и дешифрования. С буквами он использует Сетка 26 х 26. И с буквами, и с цифрами он использует сетку 36 х 36. С байтами он использует сетку 256 x 256. Только для цифр используйте сетку 10 x 10 и ключ, состоящий только из цифр.
Других решений пока нет …