#!/usr/bin/php = 0) { // Specific column $column_to_swap = OPTIMIZE_COLUMN; } else if (OPTIMIZE_COLUMN == -1) { // With lowest Sinkov (TODO: lowest score instead?) $z1_sin = sinkov_score($z1, 'en', SINKOV_N); $z2_sin = sinkov_score($z2, 'en', SINKOV_N); $z3_sin = sinkov_score($z3, 'en', SINKOV_N); $z4_sin = sinkov_score($z4, 'en', SINKOV_N); $z5_sin = sinkov_score($z5, 'en', SINKOV_N); $min = $z1_sin; if ($z2_sin < $min) $min = $z2_sin; if ($z3_sin < $min) $min = $z3_sin; if ($z4_sin < $min) $min = $z4_sin; if ($z5_sin < $min) $min = $z5_sin; if ($min == $z1_sin) $column_to_swap = 1; if ($min == $z2_sin) $column_to_swap = 2; if ($min == $z3_sin) $column_to_swap = 3; if ($min == $z4_sin) $column_to_swap = 4; if ($min == $z5_sin) $column_to_swap = 5; } else if (OPTIMIZE_COLUMN == -2) { // Random $column_to_swap = rand(1,5); } if ($column_to_swap == 1) $x1 = randomswap($x1, RANDOM_SWAP_SCHRITTE); if ($column_to_swap == 2) $x2 = randomswap($x2, RANDOM_SWAP_SCHRITTE); if ($column_to_swap == 3) $x3 = randomswap($x3, RANDOM_SWAP_SCHRITTE); if ($column_to_swap == 4) $x4 = randomswap($x4, RANDOM_SWAP_SCHRITTE, true); if ($column_to_swap == 5) $x5 = randomswap($x5, RANDOM_SWAP_SCHRITTE); } if (isset($column_to_swap)) { $x = "K1=$x1; K2=$x2; K3=$x3; K4=$x4; K5=$x5; Swap: $column_to_swap"; } else { $x = "K1=$x1; K2=$x2; K3=$x3; K4=$x4; K5=$x5"; } // --- // $c? = original content of column // $x? = key of column // $z? = decrypted $z1 = do_replace($key_c1, $x1, $c1); $z2 = do_replace($key_c2, $x2, $c2); $z3 = do_replace($key_c3, $x3, $c3); $z4 = do_replace($key_c4, $x4, $c4); $z5 = do_replace($key_c5, $x5, $c5); $z = mix5($z1, $z2, $z3, $z4, $z5); $kkk = p($z, true, true); $kkk3 = p3($z, true, true); $markov = markov_score($z, 'en', MARKOV_N); $sinkov = sinkov_score($z, 'en', SINKOV_N); if (SCORE_OPTIMIZE == 0) { $new_max = ONLY_SAVE_GREATERTHAN_MAX ? $kkk > $max_kkk : $kkk >= $max_kkk; } else if (SCORE_OPTIMIZE == 1) { $new_max = ONLY_SAVE_GREATERTHAN_MAX ? $kkk3 > $max_kkk3 : $kkk3 >= $max_kkk3; } else if (SCORE_OPTIMIZE == 2) { $new_max = ONLY_SAVE_GREATERTHAN_MAX ? $markov > $max_markov : $markov >= $max_markov; } else if (SCORE_OPTIMIZE == 3) { $new_max = ONLY_SAVE_GREATERTHAN_MAX ? $sinkov > $max_sinkov : $sinkov >= $max_sinkov; } else { $tmp = 0; if (ONLY_SAVE_GREATERTHAN_MAX) { if ($kkk > $max_kkk) $tmp++; if ($kkk3 > $max_kkk3) $tmp++; if ($markov > $max_markov) $tmp++; if ($sinkov > $max_sinkov) $tmp++; } else { if ($kkk >= $max_kkk) $tmp++; if ($kkk3 >= $max_kkk3) $tmp++; if ($markov >= $max_markov) $tmp++; if ($sinkov >= $max_sinkov) $tmp++; } $new_max = $tmp >= -SCORE_OPTIMIZE; } if (HILLCLIMB_ENABLED) { if ($new_max) { $max_kkk = $kkk; $max_kkk3 = $kkk3; $max_markov = $markov; $max_sinkov = $sinkov; $hillclimb_last_bak_key = array($x1, $x2, $x3, $x4, $x5); $z = strtolower($z); echo date('d.m.Y H:i:s').' - '; echo "($x) $z\n"; echo "\t--> (kkk: $kkk, kkk3: $kkk3, markov: $markov, sinkov".SINKOV_N.": $sinkov)\n"; $found_stuff++; $fail_counter = 0; $hillclimb_lookahead_counts = 0; # Vielleicht haben wir eine Glückssträne; weitermachen save(); } else { $hillclimb_lookahead_counts++; if ($hillclimb_lookahead_counts > $hillclimb_max_lookahead) { // Recover list($x1, $x2, $x3, $x4, $x5) = $hillclimb_last_bak_key; $hillclimb_lookahead_counts = 0; } } } else { if ($new_max) { $max_kkk = $kkk; $max_kkk3 = $kkk3; $max_markov = $markov; $max_sinkov = $sinkov; $z = strtolower($z); echo date('d.m.Y H:i:s').' - '; echo "($x) $z\n"; echo "\t--> (kkk: $kkk, kkk3: $kkk3, markov: $markov, sinkov".SINKOV_N.": $sinkov)\n"; $found_stuff++; $fail_counter = 0; save(); } } // --- } # --- function save() { global $x1, $x2, $x3, $x4, $x5; file_put_contents(SAVESTATE_FILE, "$x1\n$x2\n$x3\n$x4\n$x5\n"); } function load() { global $x1, $x2, $x3, $x4, $x5; $sav = file(SAVESTATE_FILE); $x1 = trim($sav[0]); $x2 = trim($sav[1]); $x3 = trim($sav[2]); $x4 = trim($sav[3]); $x5 = trim($sav[4]); } function change_keybyte($col, $char) { $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $var = 'x'.$col; global $$var; if ($col == 4) { if (strpos($$var, $char) < 4) return $char; } do { $tmp = $chars[rand(0,strlen($chars)-1)]; } while (strpos($$var, $tmp) !== false); $$var = str_replace($char, $tmp, $$var); return $tmp; }