Простой алгоритм шифрования на PHP

В этой заметке я покажу, как просто можно сделать функцию для шифрования на PHP

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

За основу возьмем очень простой алгоритм гаммирования xor. Его идея очень проста. Для шифрования строки с формируем вторую строку, зависящую от пароля - гамму. И сложим ее по модулю 2 со строкой, которую надо зашифровать. Расшифровка произфодится повторным применением данной функции. Вот пример кода на PHP:

Думаю комментировать код нет смысла. Все бы хорошо, но тчем плоха такая реализация? Если злоумышленнику становится известен кусок открытого и шифрованного текста, то он легко расшифрует ваше сообщение. Как же быть? Данная проблема решается введением обратной связи при формировании гаммы. Это значит, что гамма будет формироваться так, что ее куски не будут повторяться, как в первом случае:

Вот и все. Теперь вы имеете в своем распоряжении собственную функцию для шифрования. Пользуйтест на здоровье:)

 

 

 

Комментарии (11)
  • trapforspm@bk.ru Пятница 14 Август 2009
    Спасибо! Долго не мог найти различия ;) Оказалось вот в чем: "$seq = pack("H*",sha1($password));".
  • vasiatka Понедельник 17 Август 2009
    Иногда даже очень маленькие различия дают большой эффект:)
  • Никита Понедельник 13 Декабрь 2010
    Я не пойму зачем строка: $seq=$salt; ведь выше не с той, не с другой переменной мы не чего не делаем... Что хранится в переменной $salt
  • Паладин Вторник 04 Январь 2011
    Никита, salt -- это соль ;) Код явно недописан/недоделан/недоправлен/недорихтован, т.к. "соль", если используется, должна добавляться к паролю перед хешированием, и в начало хэша; но здесь она не нужна, т.к. основное её назначение -- хранение паролей в списках доступа (чтоб два одинаковых пароля не были представлены одинаковыми хэшами) http://ru.wikipedia.org/wiki/Salt#.D0.A3.D1.80.D0.BE.D0.B2.D0.BD.D0.B8_.D0.B7.D0.B0.D1.89.D0.B8.D1.82.D1.8B
  • vasiatka Четверг 06 Октябрь 2011
    Да. Действительно, соль не нужна. Когда писал пост, функции выдрал из кода и немного их упростил. При редактировании пропустил строку.
  • vasiatka Четверг 06 Октябрь 2011
    Смысл поста не в том, чтобы дать код для копипаста. В исходном коде еще были нектотрые манипуляции с солью и паролем, чтобы немного усложнить метод.
  • Роман Среда 16 Ноябрь 2011
    Пасиб. Действительно, вроде все просто.
  • Дмитрий Вторник 22 Ноябрь 2011
    Объясните мне пожалуйста, может я не правильно что то понял. Но результат не выводит!!
  • Дмитрий Вторник 22 Ноябрь 2011
    Иными словами, как сделать, чтобы были 2 поля(текст и ключ)и в итоге в результат выводилась гамма?
  • Дмитрий Вторник 22 Ноябрь 2011
    Блин, чё я леплю! Не гамма в итоге, а шифр сам :D
  • vasiatka Пятница 20 Январь 2012
    xorShipher($string,$password) принимает открытый текст и пароль, а возвращает зашифрованную строку.
Добавить комментарий
Вам необходимо включить показ изображений в браузере для того чтобы увидеть код

Дайте нам знать, что вы - живой человек. Для нас это важно!
Кликните, если плохо видно

Прежде чем высказать свое мнение, прочитайте пожалуйста: правила

Рейтинг@Mail.ru