Salve a tutti ho intenzione di implementare l'algoritmo rsa in php, l'ho gia fatto solo che ho riscontrato diversi problemi.
Primo problema è quello che usando le normali formule lo script php non riesce a fare il modulo di un numero grande quindi nella fase di decifratura esso mi restituisce 0 e non il numero di partenza che ho crittografato. Questo è il codice
Codice PHP:
<?php
function MCD($n1, $n2)
{ while ($n1 != $n2)
{ if ($n1 > $n2)
{ $n1 = $n1 - $n2; }
else { $n2 = $n2 - $n1; }
}
return $n1;}
$p=$_POST["numerouno"];
$q=$_POST["numerodue"];
$messaggio=$_POST["messaggio"];
$x=1;
$r=0;
$i=2;
$mcd=0;
echo "p= ". $p;echo'<br><br>';
echo "q= ". $q;echo'<br><br>';
$n=$p*$q;echo "n=". $n;echo'<br><br>';
$w=($p-1)*($q-1);
echo "w= ". $w;echo'<br><br>';
while($mcd!=1)
{ $mcd = MCD($w, $i);
if($mcd==1) { $e=$i; $i=$w; }
$i++;}
echo "e= ". $e;echo'<br><br>';
while($r!=1)
{$r=($e*$x)% $w;
if($r!=1){ $x++;}
}
echo "d= ". $x;echo'<br><br>';
echo "messaggio da inviare= ". $messaggio;echo'<br><br>';
$messaggioc=pow($messaggio,$e)% $n;
echo "messaggio cifrato= ". $messaggioc;echo'<br><br>';
$messaggiod=pow($messaggioc,$x)% $n;
echo "messaggio decifrato= ". $messaggiod;echo'<br><br>';
?>
Successivamente ho utilizzato un algoritmo che dopo tante ricerche ho trovato in rete il tutto funziona però con numeri primi piccoli invece utilizzando numeri primi come 617 o 521 quindi essenzialmente grandi nella fase di decifrazione non funzione perchè non mi restituisce il messaggio di partenza.
Codice PHP:
<?php
function MCD($n1, $n2)
{ while ($n1 != $n2){
if ($n1 > $n2){ $n1 = $n1 - $n2; }
else { $n2 = $n2 - $n1; }
}
return $n1;}
function chiave($n,$e,$m) {
if ($m == 0 || $e < 0) return 0;
$res = 1;
$pow = $n;
$e1 = $e;
while ($e1 != 0) { $d = $e1%2;
$e1 = floor($e1/2);
if ($d == 1) $res = ($res*$pow)%$m;
$pow = ($pow*$pow)%$m; }
if ($res < 0) $res += $m;
return $res; }
$p=$_POST["numerouno"];
$q=$_POST["numerodue"];
$messaggio=$_POST["messaggio"];
$x=1;
$r=0;
$i=2;
$mcd=0;
echo "p= ". $p;echo'<br><br>';
echo "q= ". $q;echo'<br><br>';
$n=$p*$q;
echo "n=". $n;
echo'<br><br>';
$w=($p-1)*($q-1);
echo "w= ". $w;echo'<br><br>';
while($mcd!=1){
$mcd = MCD($w, $i);
if($mcd==1) { $e=$i; $i=$w; }
$i++;}
Questi sono i due script in php. Invece per l'acquisizione dei dati vi posto anche la pagina html con un form, senza però fare un controllo sui numeri inseriti.. quindi inserite solo numeri primi.
codice HTML:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="prova.php" METHOD="post">
numero primo uno<input type="number" name="numerouno"><br><br>
numero primo due<input type="number" name="numerodue"><BR><BR>
messaggio<input type="number" name="messaggio"><BR><BR>
<INPUT TYPE="SUBMIT" VALUE="invia">
<INPUT TYPE="reset" VALUE="cancella tutto">
</form>
</body>
</html>
sto impazzendo anche perche in rete non c'è molto e voglio portare questo progetto per gli esami di stato... Grazie in anticipo...