За последние 24 часа нас посетили 17437 программистов и 1709 роботов. Сейчас ищут 1811 программистов ...

Кодировка сообщения

Тема в разделе "PHP Free-Lance", создана пользователем Ruslanpro, 17 мар 2017.

Метки:
  1. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    как оно может совпасть с ответом если я его(ответ) не знаю.
    но видимо ты имел в виду пока не попадётся комбинация а - tryevcgdha

    но это ничего мне не даст так как слово состоит не только из двух букв, ну почти ни чего не даст- даст массив вероятных результатов
     
  2. Ruslanpro

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

    С нами с:
    17 мар 2017
    Сообщения:
    151
    Симпатии:
    6
    Я не знаю что такое нативный ответ.
    --- Добавлено ---
    Я объясняю принцип работы. Для наглядности создай функцию закодируй каждую букву 10ю символами когда будешь отправлять через масив ПОСТ при получении ответа отправь получившийся ответ опять через ПОСТ до тех пор пока ответ не получишь
     
  3. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Ruslanpro ну принцип понятен был, объясню невозможность дешифровки допустим на выходе ты получил
    baXXXXb
    под X могут быть любые буквы которые не определить в виду отсутствия инфы.
    ты бы добавил рандома, разворота строк если нравится придумывать свои алгоритмы

    но это не рационально, пригодно пожалуй для личного использования для широкого использования смотри в сторону gnupg или chipher или openssl
     
  4. Ruslanpro

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

    С нами с:
    17 мар 2017
    Сообщения:
    151
    Симпатии:
    6
    Я объясняю принцип работы. Для наглядности создай функцию закодируй каждую букву 10ю символами когда будешь отправлять через масив ПОСТ при получении ответа отправь получившийся ответ опять через ПОСТ до тех пор пока ответ не получишь
    Согласен есть свои ньюансы, при кодировке увеличивается в геометрическом порядке
     
  5. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Ruslanpro только вот твои вложения не имеют смысла так как это всё можно расшифровать всеголишь одним репласом так как начальная буква в итоге будет иметь одну и ту же последовательность Безымянный.png
    те в примере мы шифровали abca после двух итераций результат acbbbbcaaaacacbb и вместо того чтобы производить обратную дешифровку с двумя повторами можно просто приравнять a = acbb

    это тот случай когда овчинка выделки не стоит
     
  6. Ruslanpro

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

    С нами с:
    17 мар 2017
    Сообщения:
    151
    Симпатии:
    6
    Новоечестно сказать не понял твой пример с abc. Закодируем к примеру как
    a = qwer
    b = asdf
    c = poiu
    слово = abc
    закодировано как = qwerasfpoiu
    При дешифровке Ответ = aasfc ( не верный ответ )
    Это говорит о том что букву нужно шифровать большим количества символов. В моем случае БУКВА = 10 символам. Может быть количество символов можно уменьшить до 8 или 7 метедом эксперемента.
     
  7. Ruslanpro

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

    С нами с:
    17 мар 2017
    Сообщения:
    151
    Симпатии:
    6
  8. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Это если одна итерация проделана над шифром. Шифр в первом посте, явно пропускался несколько раз. Конечно, я могу и ошибаться.
    Имено при пропуске повторно, начинается настоящее веселье.
     
    TeslaFeo нравится это.
  9. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @Ruslanpro ты не понял объясню ещё раз
    есть строка abca
    первая итерация aa bb cc aa
    вторая итерация azaz bzbz czcz azaz
    проводи ты хоть стопиццот итераций на выходе одна и таже комбинация будет означать одну и туже букву, количество вставляемых букв только удлинит выходной текст но не сложность дешифровки
    в примере azaz всегда будет равно а
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Это говорит о том, что не надо выдумывать велосипед.
    Вот так в реальном мире люди симметрично шифруют данные:
    PHP:
    1. $text = 'У попа была собака, он ее любил!';
    2. $key = '16or24or32signedpassword'; //16, 24 ли 32 битный пароль
    3. $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('AES-128-CBC')); //инициализирующий вектор
    4. $ciphertext = openssl_encrypt($text, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv); // настоящая криптография
    5. echo '{"iv":"' . base64_encode($iv) . '","ciphertext":"' . base64_encode($ciphertext) . '"}';//сериализованный объект, содержащий в себе строковые представления инициализирующего вектора и получившегося шифра. Потому что на самом деле, после шифрования мы получаем бинарную кашу, которую нельзя просто взять и передать в чистом виде.
    Полученный объект мы можем передавать тому, у кого есть заранее подготовленный ключ. Без ключа его не вскрыть.
    Кроме того, полученный шифр может быть расшифрован на чем угодно, что поддерживает, в данном случае, AES-128-CBC алгоритм шифрования. В любом другом языке. Хоть на клиенте в яваскрипте. Главное, чтобы ключ был на руках. Обрати внимание, что ключ не имеет привязки к используемому алфавиту. Я могу зашифровать любые данные. Кириллицу, латиницу, цифры, служебные символы, ASCII-графику, картинку в BASE64-представлении, что угодно. ВООБЩЕ ЧТО УГОДНО. 32-символьным ключом. И ты никогда не вскроешь этот шифр, не имея на руках ключ. А на подбор хорошего, крепкого ключа брутфорсом у тебя жизни не хватит.

    В твоем же случае длина ключа прямо пропорциональна длине используемого алфавита. И десятикратно его превышает. При этом, достаточно перехватывать сообщения, зашифрованные твоим методом, в течение некоторого времени, чтобы потом, получив словарную базу, вскрыть его частотным подбором в краткие сроки. Ловить шифры, сгенерированные приведенным мною кодом, можно до посинения. В них не заложено никакой информации, которую можно накапливать и использовать.

    Ах да, расшифровка:

    PHP:
    1. $cipher_object = json_decode('{"iv":"GlJE4CUP2nj/T6czKSOxMw==","ciphertext":"3Hl4sVhqEonJ77kT28I2IEYzEhl+2QSZU8ZmDN0vN+a54BWTA3IbiLSHNszZqbVufjWCoVHbkPvYyUTg+tvGMQ=="}',true); //Десериализуем наш шифрообъект
    2. $key = '16or24or32signedpassword'; //Наш заранее известный пароль
    3. $iv = base64_decode($cipher_object['iv']); //Вытаскиваем и конвертируем в бинарный вид наш иниц.вектор
    4. $cipher =  base64_decode($cipher_object['ciphertext']); //Делаем то же самое с шифром
    5. $plain_text = openssl_decrypt($cipher,'AES-128-CBC',$key,true,$iv); //Расшифровываем
    6. echo $plain_text; // получаем текст: 'У попа была собака, он ее любил!';
     
  11. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @Fell-x27, может человек любит в целях обучения изобретать велосипеды).
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    И сравни длину шифра, который получился после шифрования целого предложения с длиной шифра, который у тебя получился после шифрования одного слова.
    --- Добавлено ---
    Имхо, прежде чем изобретать велосипедное шифрование, было бы неплохо почитать про криптографию.
    --- Добавлено ---
    Даже упростит, если заранее знать алгоритм. Потому что тогда у нас есть...по сути целый текст. Это как архивирование архивов. Многие поначалу думают, что если сжать сжатый архив, то он сожмется еще сильнее. Просто потому, что не понимают, как оно работает. А на деле повторно сжатый архив может получиться больше, чем сжатый однократно.
     
  13. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @abrdabr, мне кажется ты не понял как он все зашифровал. Одним реплесом не обойтись, нужно ровно столько реплесов, сколько было при шифровании.
    --- Добавлено ---
    PHP:
    1.     "a",
    2.     "b",
    3.         ), array(
    4.     "tryevcgdha",
    5.     "qoyrtvcbzh",
    6.         ), $test);
    Например кодирование ab:
    1-ая итерация - tryevcgdhaqoyrtvcbzh
    2-ая итерация - tryevcgdhtryevcgdhaqoyrtvcqoyrtvcbzhzh

    А теперь представь в массивах все буквы были, т.е. 27. Каждый сивол в строке реплеснулся бы соответствующим паттерном. Так что никакие azaza и один реплес не катят.
     
  14. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @mahmuzar ну ты используешь дополнительные символы, но алфавит конечен, ну ок юникод конечен, на крайняк можно всё перевести в бинарные данные.
    а в твоём примере 2 итерация выглядит с точки зрения дешифровки так tnullnullnullnullnullnullnullnullnullrnull -> (yevcgdhtryevcgdhaqoyrtvcqoyrtvcbzhzh)
    те а=tryevcgdhtryevcgdhaqoyrtvcq будь в шифруемом тексте ещё одна а она тоже была бы равна этой комбинации
    PHP:
    1.     "tryevcgdhtryevcgdhaqoyrtvcq",
    2.     "oyrtvcbzhzh",
    3.         ), array(
    4.     "а",
    5.     "б",
    6.         ), $test);
     
  15. Ruslanpro

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

    С нами с:
    17 мар 2017
    Сообщения:
    151
    Симпатии:
    6
    Вы поняли алгоритм кодировки? Если нет я объясню
     
  16. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    То есть мое сообщение про настоящую криптографию вообще мимо прошло, ок.
     
  17. Ruslanpro

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

    С нами с:
    17 мар 2017
    Сообщения:
    151
    Симпатии:
    6
    Твое сообщение меня заинтересовало и надеюсь изучить эту тему
     
  18. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Только расшифровку не выкладывай:)
     
  19. Ruslanpro

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

    С нами с:
    17 мар 2017
    Сообщения:
    151
    Симпатии:
    6
    Я думаю ответ выложу а там сами алгоритм разберете))
     
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Ды понятно, что у тебя есть набор на замену, есть алфавит, ты прогнал слово через набор на замену, потом, полученный текст прогнал еще раз. И еще раз. Потенциально, к слову, сломав все, потому что есть вероятность образования сочетаний, которые на обратном преобразовании войдут во множество подмен, хотя не должны.
    --- Добавлено ---
    Ну и подмены таки не везде 10-символьные.
     
  21. Ruslanpro

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

    С нами с:
    17 мар 2017
    Сообщения:
    151
    Симпатии:
    6
    Я прогнал слово через str_replace один раз и получил то что вы видите, а через раскодировку прогоняю несколько раз до получения ответа
     
  22. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    То есть, кодирующий и декодирующий наборы, по факту, разные? Асимметричный алгоритм? Это уже интересно. И наборы кодирующих множеств генерятся тоже по какому-то алгоритму, раз так, а не просто руками набиваются?
     
  23. Ruslanpro

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

    С нами с:
    17 мар 2017
    Сообщения:
    151
    Симпатии:
    6
    Нет, одно и тоже . Код и декод прогоняю через str_replace. Там два str_replace 1 кодирует 2 декодирует
     
    #98 Ruslanpro, 18 мар 2017
    Последнее редактирование: 18 мар 2017
  24. Ruslanpro

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

    С нами с:
    17 мар 2017
    Сообщения:
    151
    Симпатии:
    6
    Выкладываю ответ или выложить рабочую страницу?
     
  25. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Я понял, в чем соль. Когда первый символ алфавита реплейса бежит по тексту, он отрабатывает нормально. Второй обрабатывает оставшийся текст, плюс то, что наработал первый, потому как идет по строке слева направа, и так далее. Потом, чтобы размотать обратно, тебе нужно сделать количество обратных реплейсов, равное количеству символов в строке.

    Ох жесть, страшно представить, сколько оно будет работать, и какой объем данных выдаст, если зашифровать..да хоть этот мой пост. Там же рост идет не в геометрической прогрессии нифига. Там что-то типа экспоненты.

    Ну а еще оно небезопасно. Чем длиннее текст, тем выше вероятность получения необратимой порчи данных.