谁能帮我在 PHP 中修复这个 Vigenere 密码?
很抱歉撕掉了代码,这是我已经剖析了几个小时的地方 - 试图修复!
无论如何,当代码应该输出“Abc”时,它会输出“Ace”。
有一些奇怪的双重偏移,我没有数学大脑来解决!谢谢阅读。
该代码源自AutoHotkey 脚本中的此处- 我已尝试将其转录。网上有 PHP Vigenere 示例(虽然没有在Rosetta Code上,很奇怪!).. 但无论如何,这个被修改为接受小写以及标准大写。谢谢。
$key = "AAA";
$keyLength = 3;
$keyIndex = 0;
$messageAsArray[0] = "A";
$messageAsArray[1] = "b";
$messageAsArray[2] = "c";
foreach ($messageAsArray as $value) //Loop through input string array
{
$thisValueASCII = ord($value);
if ($thisValueASCII >= 65 && $thisValueASCII <= 90) //if is uppercase
{
$thisValueASCIIOffset = 65;
}
else //if is lowercase
{
$thisValueASCIIOffset = 97;
}
$thisA = $thisValueASCII - $thisValueASCIIOffset;
$thisB = fmod($keyIndex,$keyLength);
$thisC = substr($key, $thisB, 1);
$thisD = ord($thisC) - 65;
$thisE = $thisA + $thisD;
$thisF = fmod($thisE,26);
$thisG = $thisF + $thisValueASCII ;
$thisOutput = chr($thisG);
$output = $output . $thisOutput ;
$keyIndex++;
}
echo $output