Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.55 KB | None | 0 0
  1. <?php
  2. function vigenere($claro,$desviacion,$tipo='e'){
  3.         // Definimos nuestro abecedario
  4.     $abc = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
  5.         //Definimos otro array inverso a $abc para pasos siguientes
  6.     $inverso = array();
  7.     foreach($abc as $a => $b){
  8.         $inverso[$b] = $a;
  9.     }
  10.         // Definimos algunas variables importantes:
  11.     $claro      = str_replace('\n','',$claro);
  12.     $totalAbc   = count($abc);
  13.     $totalClaro = strlen($claro);
  14.         // Definimos un array conformado por cada una de las letras del texto claro
  15.         // al mismo tiempo cambiamos los espacios por _
  16.     $oscuro     = str_split(strtolower(str_replace(' ','_',$claro)));
  17.     for($j=0;$j<$totalClaro;$j++){ 
  18.             // Si estamos cifrando, cambiamos cada letra por la que este $desviacion puestos a la derecha
  19.         if($tipo == 'e') $cifrado[$j] = ($inverso[$oscuro[$j]] + $desviacion > $totalAbc-1)? $abc[ $inverso[$oscuro[$j]] + $desviacion - $totalAbc] :$abc[$inverso[$oscuro[$j]] +$desviacion];
  20.             // Si estamos descifrando, cambiamos cada letra por la que este $desviacion puestos a la izquierda
  21.         else             $cifrado[$j] = ($inverso[$oscuro[$j]] < $desviacion)? $abc[ $inverso[$oscuro[$j]] - $desviacion + $totalAbc] :$abc[ $inverso[$oscuro[$j]] - $desviacion];
  22.  
  23.     }
  24.         // Nos aseguramos que la desviación no sea mayor que $totalAbc
  25.     if($deviacion > $totalAbc) return("La desviaci&oacute;n debe ser menor a ".$desviacion);
  26.         // Cambiamos los _ por espacios y devolvemos el resultado
  27.     else return ($tipo == 'd')?str_replace('_',' ',implode($cifrado)):implode($cifrado);   
  28. }
  29. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement