PHP 中带有数字的 Vigenére 密码
Posted
技术标签:
【中文标题】PHP 中带有数字的 Vigenére 密码【英文标题】:Vigenére Cipher with Numbers in PHP 【发布时间】:2015-11-17 15:57:58 【问题描述】:如何使用 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;
在我去除非字母字符后,我能否找到一种方法来保留数字,它会正常工作吗? (也许使用正则表达式作为一种更简单的方法)
【问题讨论】:
这可能更适合crypto.stackexchange.com 【参考方案1】:Vigenère 使用方形网格来加密和解密。对于字母,它使用26 x 26 grid。对于字母和数字,它使用 36 x 36 网格。对于字节,它使用 256 x 256 网格。仅对于数字,请使用 10 x 10 网格和仅由数字组成的键。
【讨论】:
以上是关于PHP 中带有数字的 Vigenére 密码的主要内容,如果未能解决你的问题,请参考以下文章