bcpowmod
bcpowmod($zaklad, $exponent, $modul, $mista)
Spočítá zbytek po dělení čísla umocněného na exponent, tedy (základ na exponent) mod modul. Výsledek je stejný jako bcmod(bcpow(…)), jen se k němu dojde rychle i u obrovských exponentů. Patří do rozšíření BCMath.
Parametry
- $zaklad – umocňované celé číslo jako text.
- $exponent – nezáporný celočíselný exponent jako text.
- $modul – celé číslo, kterým se dělí, jako text.
- $mista – nepovinný, počet desetinných míst výsledku. Výchozí je hodnota bcscale().
Příklady
// 4 na třetí je 64, zbytek po dělení pěti je 4
echo bcpowmod("4", "3", "5"); // 4
// totéž přes bcpow a bcmod
echo bcmod(bcpow("4", "3"), "5"); // 4
// obrovský exponent – bcpow by počítala číslo s tisíci číslicemi
echo strlen(bcpow("2", "10000")); // 3011
echo bcpowmod("2", "10000", "1000"); // 376
// princip RSA na malých číslech: veřejný klíč (17, 3233), soukromý (2753, 3233)
$zprava = "65";
$zasifrovano = bcpowmod($zprava, "17", "3233");
echo $zasifrovano; // 2790
echo bcpowmod($zasifrovano, "2753", "3233"); // 65
Na co si dát pozor
- Základ, exponent i modul musí být celá čísla a exponent nesmí být záporný.
- Ukázka RSA ukazuje jen princip. Skutečné šifrování nikdy nepište sami, použijte rozšíření OpenSSL nebo Sodium.
- Na běžné výpočty s penězi se nehodí, ta je pro celočíselnou aritmetiku s velkými čísly.
- BCMath je rozšíření PHP a na serveru nemusí být zapnuté. Ověříte to přes function_exists("bcadd").