Gdy patrzę na Wasze kody to mam dziwne odczucie, że chyba troszkę namieszałem z moim rozwiązaniem. Czyżby myśl, iż nie sprawdziłem wszystkiego dokładnie była prawdziwa...
Fragment kodu (w pracy mam tylko to) dekodującego parametry:
/**
* Dekoduje zaszyfrowany ciąg parametrów wejściowych.
* @uses modifiedFibonacci($base)
* @param string $paramsString
* @return string
*/
function decodeParamsString($paramsString)
{
$rotString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
"A" => 0, "B" => 1, "C" => 2, "D" => 3, "E" => 4, "F" => 5, "G" => 6, "H" => 7,
"I" => 8, "J" => 9, "K" => 10, "L" => 11, "M" => 12, "N" => 13, "O" => 14, "P" => 15,
"Q" => 16, "R" => 17, "S" => 18, "T" => 19, "U" => 20, "V" => 21, "W" => 22, "X" => 23,
"Y" => 24, "Z" => 25, "0" => 26, "1" => 27, "2" => 28, "3" => 29, "4" => 30, "5" => 31,
"6" => 32, "7" => 33, "8" => 34, "9" => 35
);
$decodedString = "";
$paramsArr = str_split($paramsString);
for($i = 0; $i < count($paramsArr); $i++) {
$offset = $rotOffsetArray[$paramsArr[$i]] - $fibonacciArray[$i];
$offset = ($offset < 0
)? 36
- abs($offset) : $offset; $decodedString .= $rotString[$offset];
}
return $decodedString;
}
/**
* Buduje tablicę wartości zmodyfikowanego ciągu Fibonacciego.
* Każda wartośc ciągu dzielona jest modulo $modulo celem wyliczenia pzesuniącia względnego.
* @param int $base
* @param int $modulo
* @return array
*/
function calculateModFibonacci($base, $modulo)
{
list
( $cur, $nxt, $inc, $seq ) = array( $base, $base, 0
, array() );
do
{
$inc++;
$seq[] = $cur % $modulo;
$add = $cur + $nxt;
$cur = $nxt;
$nxt = $add;
}
while ( $inc <= $base );
return $seq;
}