#!/usr/bin/php = RANDOM_SWAP_AFTER) { echo "#"; if ($round % SWAP_COLUMN_EVERY_XTH_ROUND == 0) { $column_to_swap = (ONLY_SWAP_COLUMN_NO == -1) ? rand(1,5) : ONLY_SWAP_COLUMN_NO; # echo "$round : $column_to_swap\n"; } 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); } else { echo "*"; } $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"; $fail_counter = 0; 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"; $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; }