Mam nadzieję, że to dobry dział.
Mam problem z RSA w PHP.
Napisałem prosty kod testowy szyfrujący i deszyfrujący prostą wiadomość (np. liczbę 16).
Szyfrowanie przebiega pomyślnie, deszyfracja też w większości przypadków, jednak owy problem pojawia się czasem. Mianowicie, źle odszyfrowuje.
Może dokładniej, dla przykładu:
Szyfruje liczbę 6 a następnie szyfrogram odszyfrowuje.
I tu pojawia się problem. W większości przypadków wszystko działa jak należy lecz zdarza się dość często że wiadomość odszyfrowana nie zgadza się z wiadomością szyfrowaną.
Gdzie może być błąd?
<?php function nwd( $a, $b ) { while( $b != 0) { $t = $b; $b = $a % $b; $a = $t; }; return $a; } function odwr_mod( $a, $n) { $p0 = 0; $p1 = 1; $a0 = $a; $n0 = $n; $q = $n0 / $a0; $r = $n0 % $a0; while($r > 0) { $t = $p0 - $q * $p1; if( $t >= 0) $t = $t % $n; else $t = $n - ((-$t) % $n); $p0 = $p1; $p1 = $t; $n0 = $a0; $a0 = $r; $q = $n0 / $a0; $r = $n0 % $a0; } return $p1; } { do { do { // $p=13; // $q=11; } while( $p == $q ) ; $phi = ($p - 1) * ($q - 1); $n = $p * $q; for($e = 3; nwd($e,$phi) != 1; $e += 2); $d = odwr_mod($e,$phi); } while( $d >= $phi ) ; echo "KLUCZ PUBLICZNY<br /> wykladnik e = ".$e. "<br /> modul n = ".$n. "<br /><br />KLUCZ PRYWATNY<br />". "wykladnik d = ".$d ; } function pot_mod( $a, $w, $n) { $pot = $a; $wyn = 1; for($q = $w; $q > 0; $q /= 2) { if($q % 2) $wyn = ($wyn * $pot) % $n; $pot = ($pot * $pot) % $n; } return $wyn; } // Odszyfrowuje: { $t = 16 ; $c = pot_mod($t,$e,$n); $c1 = pot_mod($c,$d,$n); }
Jak już pisałem kod jest całkowicie testowy.
Załączę jeszcze screen.

Pozdrawiam.