Да ну. У этого алгоритма очень небольшое множество ключей (8 из которых дают снова исходный текст). Мусор роли практически не играет. После полного перебора (т.е. шифрования теперь уже известного исходного текста со всеми возможными ключами) так и не получился шифр-текст, приведенный Pashkel'ой. Наверное, автор решил подправить результаты работы алгоритма, чтобы он выглядел надежнее
Здравствуте. Интересует какая кодировка используется при кодидировании номеров деталей на сайте. http://www.t-parts.ru/trade/search ( незнаю в правилах не прочитал можно ли давать ссылки на сайты)
Ну ок) Вот сейчас сохранил все ключи и мусор, расшифруй: Code: rge ixfwici crarkee ngw eentranio причем выбран далеко не самый сложный метод шифровки.
немного изменил алгоритм дешифровки, чтобы работал более корректно практически во всех случаях (вроде бы). Вот пример скрипта, где сразу и шифровка и дешифровка: PHP: <pre> <?php $slov = 'корректно работает со словами по отдельности и текстом в частности'; // Слово для шифрования (или текст) $bl = 8; // Длина блока, на которые делим слово $ran = 'бямпуент'; // Мусор, который добавляем, если при делении слова получился кусок меньше длины блока $key = '38247165'; // Ключ перестановки (в пределах длины блока) $shifr_slov = encode($slov,$bl,$ran,$key); echo "Пример шифрования\n"; echo "Слово < $slov >\n"; echo "Зашифрованное слово < $shifr_slov >\n"; function encode($slovo,$blog,$rand,$alg) { $res2 = str_split($alg); for ($i=0;$i<count($res2);$i++) $res2[$i]--; $res = str_split($slovo,$blog); for ($i=0;$i<count($res);$i++) { if (strlen($res[$i])<$blog) $res[$i] = $res[$i].$rand; } for ($i=0;$i<count($res);$i++) $res1[] = str_split($res[$i]); for ($i=0;$i<count($res1);$i++) { for ($j=0;$j<count($res1[0]);$j++) { $b = $res2[$j]; $hash.=$res1[$i][$b]; } } return $hash; } ########################################### echo "\n\n\n\n\n"; echo "Пример декодирования\n"; $slov = $shifr_slov; // Слово для расшифровки (или текст) //$bl = 4; // Длина блока, на которые делим слово //$ran = 'ос'; // Мусор, который добавляем, если при делении слова получился кусок меньше длины блока //$key = '3124'; // Ключ перестановки (в пределах длины блока) echo "Зашифрованное слово < $slov >\n"; echo "Расшифрованное слово < ".decode($slov,$bl,$ran,$key) . " >\n"; function decode($slovo,$blog,$rand,$alg) { $buff = ''; $res2 = str_split($alg); for ($i=0;$i<count($res2);$i++) $res2[$i]--; for ($i=0;$i<count($res2);$i++) { $c = $res2[$i]; $res3[$c] =$i; } $res = str_split($slovo,$blog); for ($i=0;$i<count($res);$i++) $res1[] = str_split($res[$i]); for ($i=0;$i<count($res1);$i++) { for ($j=0;$j<count($res1[0]);$j++) { $b = $res3[$j]; $hash.=$res1[$i][$b]; } } $hash = str_replace($rand,'',$hash); for ($i=strlen($rand);$i>0;$i--) { $buff=substr($rand,0,$i); if (strpos($hash,$buff)) { $hash = str_replace($buff,'',$hash); $buff = ''; $i=0; } } return $hash; } ?> </pre> корректно работает со словами по отдельности и текстом в частности (правда при достаточной длине мусора, чтобы было как можно меньше совпадений в мусоре (в слогах) и кодируемом/декодируемом тексте) т.е. имеет смысл при длине блока и мусора от 4-х единиц ЗЫЖ Пост подправил, привел более интересный пример, включая совпадения букв мусора с буквами с кодируемом тексте т.е. то, что выше, превращает "корректно работает со словами по отдельности и текстом в частности" в "рнортккера атооб лтссе оаовмпо итнодь леттси ои свкт емоасчсо нтбеияутпм" и обратно. На основе этого можно написать нехилый такой icq-клиент, для шифрованной переписки, что и было у меня в планах, но пока руки не доходят
Pashkela, > $hash.=$res1[$i][$b]; > $res2 = str_split($alg); [$b] - переменная? ($alg) - алго шифрования(скорее нет ..)? PS: мне проще под GCC отладить пока )
Три ключа дают правильный ответ, что ещё раз показывает ненадёжность алгоритма: Code: ключ исходный текст 312 gerix wifi cracker new generation 312645 gerix wifi cracker new generation 312645978 gerix wifi cracker new generation
класс!!!!! Умница. Твой алгоритм расшифровки даже спрашивать не буду. Если расшифруешь это - сам признаю, что метод - фекалька Code: оарсжодтлоезрнат чеыпй ец рн-т ооеэ осрпаивом тут посильнее постарался зашифровать)
Pashkela Тут даже проще чем в прошлом примере, потому что есть больше информации для атаки по исходному тексту Code: 714295836 = астролоджер зачотный перец - это неоспоримо
ыыыыыыы)))) Всё, сдаюсь. Расшифровка выше всё сказала Но это у вас есть функция дешифровки перед глазами, это имеет решающее значение, нет?
Pashkela Ни один алгоритм, секретность которого зависит от секретности самого алгоритма не является надежным. (с) Плюс твой алгоритм блочный и простой перестановки - так что не суть важно как именно перемешивается текст, главное знать приблизительную длину ключа и исходный текст (если быть точным - часть сообщения и/или язык написания)
Хорошо. Ушел долго думать. Возможно на днях выдам еще что-нибудь обратимое, но функцию декодирования показывать не буду, согласны на такой эксперимент? 2 Gifts & 2 astrologer
Нет. Во-первых, безопасность системы не должна основываться на неизвестности алгоритма - это security through obscurity. Напротив, нужно предполагать, что потенциальному взломщику известно всё, кроме ключа. Во-вторых, тот факт, что в шифр-тексте сохранена частота букв языка исходного текста, позволяет сделать предположения об используемом алгоритме. Метод расшифровки очевидный - расшифровка всеми возможными ключами и проверка на осмысленность. btw, длина шифра кратна длине ключа