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 密码的主要内容,如果未能解决你的问题,请参考以下文章

Vigenère 密码

Vigenère密码

codevs1197 Vigenère密码

[字符串][NOIP2012]Vigenère密码

Vigenère密码

Vigenère密码