За последние 24 часа нас посетили 8917 программистов и 489 роботов. Сейчас ищут 267 программистов ...

Шифрование текста [vladson_crypt1]

Тема в разделе "Решения, алгоритмы", создана пользователем Vladson, 11 июл 2009.

  1. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.041
    Симпатии:
    29
    Адрес:
    Estonia, Tallinn
    Навеяло несколькими топиками на всяких форумах "суперспецов"

    (как в прочем и отсутствие тем для обсуждения на этом форуме, хочется знаете ли вернуться и пообщаться, а общаться собственно негде, что ни топик то скукота и никакого кода)

    Короче посмотрел я за последнее время наверное десятки разных самопальных велосипедов с квадратными колёсами, и решил не отставать от моды и возродить свой (возрадить потому что основной компонент, я применял ещё на спектруме в 90-е года) вышло примерно вот что...

    PHP:
    1. <?php
    2. function vladson_crypt1 ($str, $keys) {
    3.     if (!is_array($keys)) return false;
    4.     foreach ($keys as $key)
    5.         if (!is_int($key)) return false;
    6.     if (!is_string($str)) return false;
    7.     $len = strlen($str);
    8.     if (0 == $len) return false;
    9.     for($i=0; $i<$len; $i++) {
    10.         array_push($keys, (array_sum($keys)&255)*2);
    11.         if (end($keys) > 255)
    12.             array_push($keys, array_pop($keys)-255);
    13.         array_shift($keys);
    14.         $str[$i] = chr(ord($str[$i])^end($keys));
    15.     }
    16.     return $str;
    17. }
    18. ?>
    Смысл работы прост как никогда, простая XOR-илка на основе генератора быдлослучайных чисел (быдлослучайных потому что под 100% словарное понятие "генератора случайных чисел" он не совсем попадает, но числа действительно разные, в принципе вместо этого можно было использовать простой srand, но я этого не сделал)

    Собственно используется примерно так:
    PHP:
    1. <?php
    2. $encoded = vladson_crypt1('Vladson', array(1, 2, 3));
    3. $decoded = vladson_crypt1($encoded, array(1, 2, 3));
    4. ?>
    Где array(1,2,3) это ключ. Чисел может быть как одно (но тогда период повторения у генератора будет мизерным) т.е array(1) так и несколько т.е array(х, х, х, итд) конечно после какого-то их количества всё упрётся во что нибудь. (Замечу упрётся, но работать не перестанет, если конечно чисел не будет столько что привысится допустимая память.) Я бы не рекомендовал использовать больше 5-ти, потому что даже при 4-х период будет исчисляться миллиардами, этого более чем достаточно.

    Собственно код может показаться "развратным", собственно это делалось специально, косвенной причиной написания была попытка продемонстрировать одному человеку что функции для работы с массивами в РНР очень даже разнообразны и полезны, и что не стоит читая мануал думать что "эта хрень мне не пригодится, знаю $array[] знаю unset, этого хватит"

    Критику конечно прочитаю с радостью, код конечно написан больше для смеха чем для использования, но он работает и не глючит, это факт! Так что если кроме критики будут ещё и наоборот добрые слова, мне будет приятно...

    P.S. - Я не вернулся, просто забежал скоротать пару вечерков...
     
  2. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
  3. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.041
    Симпатии:
    29
    Адрес:
    Estonia, Tallinn
    Да ни чем, в данной конкретной реализации памяти меньше жрёт при больших объёмах, и выглядит круче )))
    Просто последовательность случайных чисел берёт с более примитивного генератора.
     
  4. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    фигово что строки после таких шифров никуда не годные получаются. Разве что система на юникоде и способна сохранить все эти иероглифы. Выдавала б она что-то типа того, что base64 возвращает.

    я вот хочу внедрить в систему где работаю (кстати она из Эстонии) выдачу демо-ключей. Получается даю ключ, он привязан к домену и до определенной даты работает. Естественно если не менять время на сервере)) Но ясен пень использовать вот такие функции там нельзя так как бытует мнение о их слабой устойчивости.
     
  5. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.041
    Симпатии:
    29
    Адрес:
    Estonia, Tallinn
    Сочувствую. :)
    1 - Ломать продукты Ыстонской фирмы профи мирового класса не будут, по этому хватит совершенно любого способа.
    2 - Если таки будут (допустим это будет действительно финансово ОЧЕНЬ выгодно) тогда никакие системы не помогут.
    3 - Эта шифровалка генерирует гамму с помощью почти нигде не описанного алгоритма, потому что это не настоящий ГПСЧ а пародия (написанная для экономии тактов проца на компах которые были медленнее и тупее чем сейчас пульты от телевизора)
     
  6. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    ну обкатаем метод у них, а потом может и я чего-то набыдлокодю и захочу продвать. Ну и ессно не хочется что б скрипт был поставлен на Over 9000 сайтов с варезом (превед DLE).

    и да, сейчас 440hz прибежит и скажет что нужно все далать свободным, тогда оно никому нафиг не нужно.
     
  7. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    это не шифрование, это кодирование.
     
  8. kostyl

    kostyl Guest

    antonn
    ну че вы уже к словам придираетесь...