шифрование с помощью ключей, вещь конечно очень мощная.
но мне всегда было интересно придумать шифрование которое бы основывалось только на исходной строке.
насколько я знаю, до сих пор нет таких алгоритмов, чтобы они при этом были обратимыми и обладали очень высокой стойкостью к взлому.
нубский, наверное, вопрос, но я не могу понять, а зачем может понадобиться применять некоторый алгоритм шифрования, который всем известен?
то есть расшифровать строку можно вашей же функцией, в чем смысл шифрования?
шифрование основано на двух матрицах(квадратах) с символами. символы в каждом квадрате одни и теже но в разной последовательности. тоесть вы берете мою функцию, перемешиваете подругому второй квадрат и всё. шифрование будет уже другое.
почти любое шифрование так или иначе использует ключи.
здесь нет понятия ключей в применимом обычно смысле. так как ключи внутренние, постоянные для каждой реализации функции и потому упрощающие пользование функцией
Ну так значит, ваши матрицы с квадратами — и есть ключи шифрования.
Ведь ключ — это не обязательно абстрактная строчка длиной n бит.
К примеру в ГОСТ — ключ — это точка эллиптической кривой. А в двойном квадрате — это матрицы
В этом не сложность, в этом невозможность достижения одновременно этих двух параметров… Вроде как «Lexus в комплектации Luxury за 9999.99 руб.». Или «Запорожец 1980 г.в всего за 4 232 226 руб.» Кому какая аллегория ближе…
-почти пол функции это создание самих матриц с символами ) остальное обход в два цикла. как именно можно сделать проще?
-наличие [] в $s1[$a1[]][$a2[1]] э то парсер съел :(. там не [] должно быть а [0]
это конечно дело вкуса но именно создание матриц я считаю переусложнением. никаких там масивов с индексами не надо — все можно посчитать простенькими операциями mod и div.
когда кликнули на mailto.php, я показываю окошко с Капчей, и если её правильно ввели, то налету получаю реальный Емайл из переданного шифра, и показываю пользователю
ссылка ведет на капчу.
а как мне в скрипте узнать какое именно мыло то отобразить?
передавать ИД пользователя? и лезть опять в БД чтоб получить почту?
тоже вариант. но у меня получается более универсально так как работает с любым переданным мылом сразу. и к БД коннектов таким образом меньше.
устраивает)
но имеет дополнительные минусы
— не работает если JS выключен
— злоумышленник имеет у себя исходник шифрования, что на порядок упрощает настройку бота на автоматический взлом
а зачем 2кб? максимальная длина ключа, которая имеет смысл — 256 байт. а взломать более чем реально, если есть большой набор материала (WEP дырявый, да и WPA1, основаны на RC4 как раз)
Не в два раза. А константно на 16 байт.
Там просто вначале идет 16-байтовый инициализирующий вектор. А за ним само сообщение, тоже выровненное на границу 16 байт. Так что оверхед в худшем случае будет составлять 31 байт.
alek_sys писал что то типа «Т.е. я правильно понял — вы по МД5 хэшу восстанавливаете исходное значение?»
Но блин как можно по md5 хэшу восстановить что то конкретное?
ваша функция, есть просто еще одна модификация XOR шифрования )
а как легко сломать xor-подобные функции можно поискать в гугле. там море способов.
жду фразы зашифрованные вашей функцией )
Знаете, одноразовый блокнот тоже строится на основе XOR. Его вы тоже сломаете? :)
В самом XOR нет совершенно ничего плохого. Всё зависит от того, с чем XORить.
Вот тут вы правы в одном, XOR — это не шифрование. Это «исключающее или» :)
А вообще XOR как один из этапов применяется во многих крипто-алгоритмах.
Вот почитайте например о гаммировании: ru.wikipedia.org/wiki/Гаммирование
Да в общем вы и сами можете зашифровать. Просто выберите в качестве пароля любую строчку подлинее. А потом забудьте пароль :)
И попробуйте восстановить зашифрованное сообщение.
Если получится — напишите топик (я первым за него проголосую), или отпишитесь сюда в комментарии, как вы это сделали.
Слабость конкретно этого шифра заключается в том, что там в преобразованиях используется сам пароль (вместого его хеша). При коротких паролях возможно он легко вскроется. Но если поставить случаный 16-символьный пароль — будет уже сложнее.
В общем, попробуйте :)
Думаю хабрасообществу будет интересен такой топик
Это легко посчитать ручками. Для того чтобы получить «достаточное» количество исходного материала, нужно передать все пары из алфавита, комбинация L по 2 => L*(L-1)… Упростить не получиться, т.к. импликации и эквивалентности нет, т.к. 2 разных квадрата…
Опс… Забыл что у нас пары… Т.е. 2*L*(L-1)…
кстати, этот RC4 — с ошибками, сравните результат его работы и работы mcrypt'овского ARCFOUR. к тому же парадоксально медленеее, чем вариант без ошибок (http://www.phpclasses.org/browse/file/3689.html)
Использовал для своего шифрования случайные числа, в итоге для одной и той же строки получается разный зашифрованный результат, при расшифровке все отрабатывается нормально и не требуется никаких ключей, для передачи данных пользователю в хидден полях подходит хорошо.
Вот, есть ещё один, довольно просто реализуемый алгоритм симметричного шифрования. Называется CipherSaber (CipherSaber на Wikipedia). Легко реализуется на PHP.
Первое правило криптографии — не изобретайте свои алгоритмы. Подобный — основанный на квадратах взламывается моментально (см. линейный криптоанализ)
Как уже подсказали реализация полно в частности BlowFish, DES (пусть и скомпрометированный, но достаточно стойкий), IDEA, GOST блоковые или тот же совершенно простой RC4 потоковый.
GOST это ГОСТ? Забавно вы его на родине обзываете.
Первое правило криптологии: Нельзя недооценивать противника, а не ваше.
Здесь более уместны 2, 3, 4 правила:
1. О степени сложности может судить только криптоаналитик
2. При оценке надежности, нужно допустить что противнику известно все кроме ключа.
3. Внешняя сложность может быть иллюзорной, она вселяет в криптографа обманчивое впечатление надежности
Хотя в остальном согласен, глупо в криптографии изобретать велосипед
Обратимое шифрование текста — метод «Двойной квадрат»