<?php
function score_xor($line) {
$score_arr = array();
$char_scores_arr = array(
"a" => 9,
"b" => 1,
"c" => 3,
"d" => 4,
"e" => 13,
"f" => 2,
"h" => 6,
"i" => 7,
"j" => 0,
"k" => 1,
"l" => 4,
"m" => 2,
"n" => 7,
"o" => 8,
"p" => 2,
"q" => 0,
"r" => 6,
"s" => 6,
"t" => 9,
"u" => 3,
"v" => 1,
"w" => 2,
"x" => 0,
"y" => 2,
"z" => 0
);
#$input = pack("H*", "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736");
$input = pack("H*", $line);
for ($i = 0; $i < 128; $i++) {
$ciphertext = array();
$score = 0;
for ($j = 0; $j < strlen($input); $j++) {
$to_add = chr(ord($input[$j]) ^ $i);
array_push($ciphertext, $to_add);
if (array_key_exists(strtolower($to_add), $char_scores_arr))
$score += $char_scores_arr[strtolower($to_add)] + ord($to_add);
}
$ciphertext = implode("", $ciphertext);
$score_arr[$ciphertext] = $score;
}
arsort($score_arr);
$count = 5;
$ret = array();
foreach ($score_arr as $ciphertext => $score) {
if ($count--)
array_push($ret, "Text: $ciphertext\n\tScore: $score\n");
else
break;
}
return $ret;
}
$txt = file_get_contents("http://cryptopals.com/static/challenge-data/4.txt");
$lines = explode("\n", $txt);
$results = array();
foreach ($lines as $line) {
array_push($results, score_xor($line));
}
var_dump($results);
?>
preferences:
39.27 ms | 402 KiB | 5 Q