3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * */ class RompeCesar { private $letras = "abcdefghijklmnopqrstuvwxyz"; private $frecuenciasAlfabetoIngles = array(0.0817, 0.0150, 0.0278, 0.0425, 0.1270, 0.0223, 0.0202, 0.0609, 0.0697, 0.0015, 0.0077, 0.0403, 0.0241, 0.0675, 0.0751, 0.0193, 0.0010, 0.0599, 0.0633, 0.0906, 0.0276, 0.0098, 0.0236, 0.0015, 0.0197, 0.0007); function __construct() { // code... } // A 65 Z 90 // a 97 z 122 public function cifrarDesplazamiento($str, $shift) { while ($shift > 26) { $shift -= 26; } for ($i = 0; $i < strlen($str); $i++) { if (ord($str[$i]) != 32) { $posDesplazada = ord($str[$i]) + $shift; if ($posDesplazada > 122) { $str[$i] = chr(($posDesplazada % 122) + 96); } else if ($posDesplazada < 97) { $str[$i] = chr(122 - (96 - $posDesplazada)); } else { $str[$i] = chr($posDesplazada); } } } return $str; } public function descifrarDesplazamiento($str, $shift) { while ($shift > 26) { $shift -= 26; } return $this->cifrarDesplazamiento($str, -$shift); } public function quitarEspacios($str) { return preg_replace('/\s+/', '', $str); } public function calcularFrecuenciasAlfabeto($str) { $str = $this->quitarEspacios($str); $largoSinEspacios = strlen($str); $apariciones = array(); $frecuencia = array(); for ($i = 0 ; $i < strlen($this->letras) ; $i++) { $apariciones[$this->letras[$i]] = 0; $frecuencia[$this->letras[$i]] = 0; } for ($i = 0 ; $i < $largoSinEspacios ; $i++) { $apariciones[$str[$i]]++; } for ($i = 0 ; $i < strlen($this->letras) ; $i++) { $frecuencia[$this->letras[$i]] = $apariciones[$this->letras[$i]] / (float) $largoSinEspacios; } return $frecuencia; } // la comprobación del 0 es porque en textos pequeños puede que haya letras // que no aparezcan // cuanto menor sea la chi, más se parecen los arrays public function chiCuadrado($frecs1, $frecs2) { $chi = 0; for ($i = 0 ; $i < strlen($this->letras) ; $i++) { $diferencia = $frecs1[$i] - $frecs2[$this->letras[$i]]; $cuadradoDiferencia = $diferencia * $diferencia; if ($frecs2[$this->letras[$i]] != 0) $cuadradoDiferencia /= $frecs2[$this->letras[$i]]; $chi += $cuadradoDiferencia; } return $chi; } public function descifrarSinSaberClave($str) { $arrayChis = array(); for ($i = 1 ; $i < 25 ; $i++) { $arrayChis[$i] = $this->chiCuadrado($this->frecuenciasAlfabetoIngles, $this->calcularFrecuenciasAlfabeto($this->cifrarDesplazamiento($str, $i))); } return $arrayChis; } } // sabemos que está en inglés $textoCifrado = "lrvmnir bpr sumvbwvr jx bpr lmiwv yjeryrkbi jx qmbm wi bpr xjvni mkd ymibrut jx irhx wi bpr riirkvr jx ymbinlmtmipw utn qmumbr dj w ipmhh but bj rhnvwdmbr bpr yjeryrkbi jx bpr qmbm mvvjudwko bj yt wkbrusurbmbwjk lmird jk xjubt trmui jx ibndt wb wi kjb mk rmit bmiq bj rashmwk rmvp yjeryrkb mkd wbi iwokwxwvmkvr mkd ijyr ynib urymwk nkrashmwkrd bj ower m vjyshrbr rashmkmbwjk jkr cjnhd pmer bj lr fnmhwxwrd mkd wkiswurd bj invp mk rabrkb bpmb pr vjnhd urmvp bpr ibmbr jx rkhwopbrkrd ywkd vmsmlhr jx urvjokwgwko ijnkdhrii ijnkd mkd ipmsrhrii ipmsr w dj kjb drry ytirhx bpr xwkmh mnbpjuwbt lnb yt rasruwrkvr cwbp qmbm pmi hrxb kj djnlb bpmb bpr xjhhjcwko wi bpr sujsru msshwvmbwjk mkd wkbrusurbmbwjk w jxxru yt bprjuwri wk bpr pjsr bpmb bpr riirkvr jx jqwkmcmk qmumbr cwhh urymwk wkbmvb"; $cifrador = new RompeCesar; /* echo $cifrador->cifrarDesplazamiento("attack", 17) . "\n"; echo $cifrador->cifrarDesplazamiento("attack", 225) . "\n"; echo $cifrador->descifrarDesplazamiento("rkkrtb", 225) . "\n"; //print_r($cifrador->calcularFrecuenciasAlfabeto($textoCifrado));*/ print_r($cifrador->descifrarSinSaberClave($textoCifrado));
Output for git.master, git.master_jit, rfc.property-hooks
Array ( [1] => 3.8610192926996 [2] => 8.0940870034157 [3] => 5.1383381099849 [4] => 3.1305765933367 [5] => 2.4915963979181 [6] => 2.9996436353515 [7] => 4.692701093949 [8] => 7.9312572576079 [9] => 4.9210166191342 [10] => 2.0085306927504 [11] => 3.9309969459652 [12] => 6.6333817563885 [13] => 9.0755833185457 [14] => 8.385407152827 [15] => 3.1289385434874 [16] => 2.676404047001 [17] => 2.5120201597561 [18] => 1.4827336267976 [19] => 2.9789856411302 [20] => 5.2930992361982 [21] => 5.1487486322187 [22] => 2.1287578468551 [23] => 2.8390098573694 [24] => 13.038950629727 )

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
58.02 ms | 403 KiB | 8 Q