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.

📘 Naucz się w lekcji →