Re: Trying to create an encryption method

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



At 11/4/2006 08:15 PM, John Meyer wrote:
I'm trying to create this encryption method for puzzles (nothing super
secret, just those cryptograms), but this seems to time out, can anybody
point out what I'm doing wrong here:

for ($i=1;$i<=26;$i++) {
            $normalAlphabet[$i] = chr($i);
        }
        //now, to shuffle

        for ($j=1;$j<=26;$j++) {
            do {
            $k = rand(1,26);
            } while ($k == $j || (strlen(trim($normalAlphabet[$k])) === 0));
            $arEncryptedAlphabet[$j] = $normalAlphabet[$k];
            $normalAlphabet[$k] = "";
        }
        $arNormalString = str_split($normalzedString);
        $encryptedString = "";
        for ($i=0;$i<count($arNormalString);$i++) {
            if (ord($arNormalString[$i])>=65 &&
ord($arNormalString[$i])<=90) {
                $encryptedString = $encryptedString .
$arEncryptedAlphabet[ord($arNormalString[$i]) - 64];
            } else {
                $encryptedString = $encryptedString . $arNormalString[$i];
            }
        }
        return $encryptedString;
    }

At 11/4/2006 08:43 PM, Stut wrote:
Both the inner loop and the outer loop are using $i, meaning the outer loop will never end since it gets reset in the inner loop.


No, there is no loop nesting. The OP's indenting is misleading. Here's a reformatted version:
____________________________

for ($i=1;$i<=26;$i++)
{
        $normalAlphabet[$i] = chr($i);
}

//now, to shuffle
for ($j=1;$j<=26;$j++)
{
        do
        {
                $k = rand(1,26);
        }
        while ($k == $j || (strlen(trim($normalAlphabet[$k])) === 0));

        $arEncryptedAlphabet[$j] = $normalAlphabet[$k];
        $normalAlphabet[$k] = "";
}

$arNormalString = str_split($normalzedString);
$encryptedString = "";

for ($i=0;$i<count($arNormalString);$i++)
{
if (ord($arNormalString[$i])>=65 && ord($arNormalString[$i])<=90)
                {
$encryptedString = $encryptedString . $arEncryptedAlphabet[ord($arNormalString[$i]) - 64];
                }
                else
                {
$encryptedString = $encryptedString . $arNormalString[$i];
                }
}
return $encryptedString;

}
____________________________

The script spends eternity executing the do...while loop. John, display your values at each loop while your code is running to see where your problem lies.

By the way, are you aware that chr(1) isn't 'A'? It's hex(01). 'A' = hex(40) = dec(64). Your array $normalAlphabet is not going to contain the alphabet the way it's written now.

Regards,
Paul

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux