Elenet.net
+1 voto
Realizzare in php, un piccolo portale che  decifri una frase cifrata facendo uso dell'algoritmo Playfair cipher, data dall'utente .
quesito posto 6 Aprile 2017 in Informatica da tonins Corsista (123 punti)
  

1 Risposta

+1 voto
Risposta migliore
Finito e funzionante:
HTML:

<HTML>
<BODY>

<FORM ACTION="decifro.php"  METHOD="POST">
<INPUT TYPE="Text" NAME="chiave"> chiave <BR>
<INPUT TYPE="Text" NAME="frase"> Inserisci la frase da decifrare <BR>

<INPUT TYPE="Submit" VALUE="invia">
<INPUT TYPE="Reset" VALUE="cancella">

</FORM>

</BODY>
</HTML>

PHP:

<HTML>
<BODY>

<?php
     
$chiave=$_POST['chiave'];
$frase=$_POST['frase'];
$vettorechiave = [];
$posizioni = [];
$chiave=strtolower($chiave);
$chiave = str_replace(' ', '', $chiave);
$l=0;
$lettere = [];

$frase=strtolower($frase);
$frase = str_replace(' ', '', $frase);

$nc = strlen($chiave);
$nf= strlen($frase);
echo $nf;
// Aggiungo la x se la frase è dispari
if($nf % 2 != 0 ){
    $frase[$nf]="x";
    echo $frase;
}

for($i=0;$i<$nc;$i++){
    
if (!in_array($chiave[$i],$vettorechiave)) {
    $vettorechiave[]=$chiave[$i];
    
    
}
}
echo "La chiave senza ripetizioni e':";
foreach ($vettorechiave as $value) {
   echo $value;
}
for($i=97;$i<25+97;$i++){
    if(!in_array(chr($i),$vettorechiave)){
        $vettorechiave[]=chr($i);
    }
}

        

?>

<table border=1>

<?php //VISUALIZZO LA TABELLA E POPOLO IL VETTORE CON LE POSIZIONI
$righe = 5; // setta il num di righe
$colonne = 5; // setta il num di colonne
$indice_elenco=0;
$k=0;
$i=0;
$l;

for($i=0; $i<$righe; $i++) { // 1^ ciclo creo righe
echo "<tr>";

for($k=0; $k<$colonne; $k++) { // 2^ ciclo creo le col
echo "<td>" ;
$posizioni[$vettorechiave[$indice_elenco]]="$i,$k";  

echo $vettorechiave[$indice_elenco];
$indice_elenco++;

}

}

?></table>

<?php
$frase=str_replace('z', 'y', $frase);
print_r ($posizioni);
print_r ($vettorechiave);
$frasecifrata="";
for($i=0;$i<$nf;$i=$i+2){

    $stfrase=substr($frase,$i,2);

    
         $pos1=$posizioni[$stfrase{0}];
         $pos2=$posizioni[$stfrase{1}];

         $let1pos = explode(",", $pos1);
         $let2pos = explode(",", $pos2);
         
         
             if($let1pos[0]==$let2pos[0]&&$let1pos[1]!=$let2pos[1]){
            $let1pos[1]=$let1pos[1]-1; $let2pos[1]=$let2pos[1]-1;
            if($let1pos[1]==(-1) ){
                $let1pos[1]=4;
            }
            if( $let2pos[1]==(-1)){
              $let2pos[1]=4;
            }
        
        }
        
        if($let1pos[0]!=$let2pos[0]&&$let1pos[1]==$let2pos[1]){
            
            $let1pos[0]=$let1pos[0]-1; $let2pos[0]=$let2pos[0]-1;
            
if($let1pos[1]==(-1) ){
                $let1pos[1]=4;
            }
            if( $let2pos[1]==(-1)){
              $let2pos[1]=4;
            }
        }
        
        if($let1pos[0]==$let2pos[0]&&$let1pos[1]==$let2pos[1]){
        $let1pos[1]=4; $let2pos[1]=4;
            $let1pos[0]=4; $let2pos[0]=4;
            
        }
        
        if($let1pos[0]!=$let2pos[0]&&$let1pos[1]!=$let2pos[1]){
            $p1=$let1pos[0];
            $p2=$let2pos[0];
            $let1pos[0]=$let2pos[0];
            $let2pos[0]=$p1;
            
        
        }
        $primalettera = implode(",", $let1pos);
        $secondalettera = implode(",", $let2pos);

    
    $lettera1 = array_search($primalettera, $posizioni);
    $lettera2 = array_search($secondalettera, $posizioni);
    
    
    
    $frasedecifrata=$frasedecifrata.$lettera1.$lettera2;
    
}

    echo $frasedecifrata;
    

    

?>

</BODY>
</HTML>
risposta inviata 26 Maggio 2017 da Ale200197 Corsista (76 punti)
Selezionata 26 Maggio 2017 da tonins
Ottimo, del resto per un bravo programmatore una volta realizzato il duale funzionante, questo era una passeggiata

Domande correlate

+1 voto
11 risposte
quesito posto 6 Aprile 2017 in Informatica da tonins Corsista (123 punti) | 894 visite
0 voti
1 risposta
quesito posto 30 Maggio 2017 in Informatica da Mimmo Corsista (49 punti) | 6,676 visite
+1 voto
1 risposta
quesito posto 12 Febbraio 2016 in Informatica da Ivan Lindiner (20 punti) | 1,019 visite
778 domande
1,565 risposte
639 commenti
1,445 utenti