Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- function vigenere($claro,$desviacion,$tipo='e'){
- // Definimos nuestro abecedario
- $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');
- //Definimos otro array inverso a $abc para pasos siguientes
- $inverso = array();
- foreach($abc as $a => $b){
- $inverso[$b] = $a;
- }
- // Definimos algunas variables importantes:
- $claro = str_replace('\n','',$claro);
- $totalAbc = count($abc);
- $totalClaro = strlen($claro);
- // Definimos un array conformado por cada una de las letras del texto claro
- // al mismo tiempo cambiamos los espacios por _
- $oscuro = str_split(strtolower(str_replace(' ','_',$claro)));
- for($j=0;$j<$totalClaro;$j++){
- // Si estamos cifrando, cambiamos cada letra por la que este $desviacion puestos a la derecha
- if($tipo == 'e') $cifrado[$j] = ($inverso[$oscuro[$j]] + $desviacion > $totalAbc-1)? $abc[ $inverso[$oscuro[$j]] + $desviacion - $totalAbc] :$abc[$inverso[$oscuro[$j]] +$desviacion];
- // Si estamos descifrando, cambiamos cada letra por la que este $desviacion puestos a la izquierda
- else $cifrado[$j] = ($inverso[$oscuro[$j]] < $desviacion)? $abc[ $inverso[$oscuro[$j]] - $desviacion + $totalAbc] :$abc[ $inverso[$oscuro[$j]] - $desviacion];
- }
- // Nos aseguramos que la desviación no sea mayor que $totalAbc
- if($deviacion > $totalAbc) return("La desviación debe ser menor a ".$desviacion);
- // Cambiamos los _ por espacios y devolvemos el resultado
- else return ($tipo == 'd')?str_replace('_',' ',implode($cifrado)):implode($cifrado);
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement