Re: Trying to create an encryption method
| From: | Paul Novitski | Date: | Sun, 05 Nov 2006 07:55:56 +0000 |
| Subject: | Re: Trying to create an encryption method | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-244225@lists.php.net to get a copy of this message | ||
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++) {At 11/4/2006 08:43 PM, Stut wrote:$normalAlphabet[$i] = chr($i); } //now, to shufflefor ($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; }
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