Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #30, МАЙ 2003 г.

РАЗВЛЕЧЕНИЕ ДЛЯ 31337-ваяем |^|РЕ0БqА3о84тель теXта

Alex Shark

Спецвыпуск Xakep, номер #030, стр. 030-028-4


Есть несколько способов создания таблицы, лично пользовал и расскажу о парольном и датированном кодировании. Парольное кодирование применяется часто - это когда ты вводишь пароль и видишь кашу. С другой стороны чел вводит пароль и видит текст, который ты ему посылал. Датированное кодирование - это когда паролем служит дата создания таблицы, z применял для поздравления в нужный день :). Это немного более практично, поскольку даже настоящие шифроблокноты использовали эту схему. То есть чел принимал шифровку, открывал страничку с сегодняшним числом, читал и мог смело выкидывать эту страничку. Больше одного раза пароль не использовался. Кроме того, даже если подобрать пароль к первому сообщению, то он не сработает на втором. Но самое интересное - это пароль, где есть и дата, и число, с шифраторами на разных серверах. Можешь даже завещание потомкам оставить, и когда наступит 3000 год, они смогут его прочитать. Правда, найдется пара перцев, которые прочтут все намного раньше :). Кодирование по дате выглядит достаточно интересно, текст есть, сайт есть, а декодировать не получается. А все потому, что чувак, которому этот текст предназначен, прилетит только через неделю и, зайдя на сайт, без проблем все прочтет.

#!/usr/bin/perl

use CGI qw(param);

$mday = param("day");

$mon = param("mon");

$year= param("year");

srand($mday*$mon*$year);

$symb="abcdefghijklmnopqrstuvwxyz";

while($symb){do{

$s = rand(36) + 33;} while ($temp{$s});

$temp{substr($symb,0,1)."\n"} = chr($s)."\n";

substr($symb,0,1)="";}

%table=reverse %temp;

open OUT,">table.dat";

print OUT %table;

close OUT;

Это прога для создания кодирующей таблицы, при запуске ей необходимо передать день, месяц и год, которые будут в момент раскодирования. Не забывай, что день и месяц считаются от нуля, а год - с 1900. В этой программе все так же, как и в проге для декода. Изменено только начало, дата не берется из системы и передается вручную. И маленький оператор reverse меняет местами буквы и значения, это и определяет кодирующую таблицу или декодирующую.

#!/usr/bin/perl

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

srand($mday*$mon*$year);

$symb="abcdefghijklmnopqrstuvwxyz";

while($symb){do{

$s = rand(36) + 33;} while ($table{$s});

$table{substr($symb,0,1)."\n"} = chr($s)."\n";

substr($symb,0,1)="";}

open OUT,">table.dat";

print OUT %table;

close OUT;

Ну, тут все просто. Берем дату, конкретно день, месяц и год, все это запихиваем в переменную начала отсчета для случайного числа. В переменную symb помещаем все символы, которые надо кодировать. Составляем таблу и пишем ее в файлец table.dat. Вот, собственно, и вся прога. Ее надо запускать из программы кодировщика, перед тем как кодировать. Для использования пароля вместе с датой можно сделать как положено, то есть обработать пароль и, получив цифровое значение, запихать его в тот же srand. Но можно пойти и нестандартным путем, достаточно добавить наш пароль в начало переменной $symb, и это спутает все карты при декоде, хотя на качестве и скорости практически не отразится. Более того, при пустом пароле все должно работать только по дате, а не вываливаться с ошибкой в письмо админу сервера. К сожалению, Flash и Perl имеют разную основу для генерации случайного числа, поэтому если ты закодируешь письмецо на серваке, то никакими Flash клиентами ты его не откроешь. Так что для суперсекретного декода придется поставить себе перла.

Назад на стр. 030-028-3  Содержание  Вперед на стр. 030-028-5