gmp_powm
funkcja
Oblicza potęgowanie modulo (base^exp mod modulus) dla dużych liczb GMP — kluczowe w kryptografii.
gmp_powm(GMP|int|string $base, GMP|int|string $exp, GMP|int|string $mod): GMP
gmp_powm oblicza $base ^ $exp mod $mod jako jeden krok, zwracając obiekt GMP. To szybkie modularne potęgowanie (square-and-multiply), które jest fundamentem kryptografii klucza publicznego — m.in. algorytmu RSA i wymiany kluczy Diffiego–Hellmana. Gdybyś liczył gmp_mod(gmp_pow($base, $exp), $mod), wynik pośredni (gmp_pow) byłby astronomicznie duży i obliczenia trwałyby wieczność.
<?php
declare(strict_types=1);
// 2^100 mod 1_000_000_007
$wynik = gmp_powm(2, 100, 1000000007);
echo $wynik; // wynik: 976371285
// Uproszczony schemat RSA: szyfrowanie wiadomości
$m = '42'; // wiadomość
$e = '65537'; // wykładnik publiczny
$n = '3233'; // modulus (iloczyn dwóch liczb pierwszych: 61 * 53)
$szyfr = gmp_powm($m, $e, $n);
echo $szyfr; // wynik: 2557
Wszystkie trzy argumenty mogą być obiektami GMP, liczbami int lub ciągami znaków. Gdy operujesz na kluczach RSA-2048 (liczby ~600-cyfrowe), gmp_powm jest wciąż szybkie dzięki algorytmowi potęgowania binarnego.