Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
17
Добавлен:
20.04.2024
Размер:
19.21 Mб
Скачать

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

 

 

 

 

 

 

 

 

 

 

ICQ

 

 

 

 

 

 

 

 

 

 

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

Click

to

BUY

 

 

 

 

 

 

m

Кодинг

 

 

 

 

 

 

 

 

w Click

to

BUY

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

g

.c

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

df

 

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВЗГЛЯД НА ICQ ИЗ DELPHI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dr.Zlobyus (cool16@e-mail.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Взгляд

íà

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

èçDelphi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Популярность

ICQ все никак не падает, а наоборот,

идет огромный поток новых пользователей

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. И если несколько лет назад для ICQ существовал

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(русские же сидят обычно на шестизначках)

 

 

AOL), то теперь их

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

только один официальный клиент

от умершей нынче Mirabilis (ее поглотила

÷åìó

ÿ ýòî âñå? :)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Ê

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. И, причем, под любую ось, будь то винды, маки

или никсы

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ïðóä

пруди

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Просто и мы сегодня напишем своего

клиента, пусть не супернавороченного,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-mail.ru)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dr.Zlobyus (cool16@e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ты уже заинтересовался?

Отлично, сейчас я быстренько введу тебя в курс дела.

ß äàâ-

-

но хотел разработать

собственный ICQ-клиент, но все времени

не было, да и трудоем

 

 

 

 

 

кодом и т.п. Но потом мне в руки по-

ко это - не хотелось геморроиться с громоздким

 

 

 

предвкушением

я установил

пались два компонента для работы с ICQ. С радостным

 

 

 

. Íî âòî-

 

. За его использование требовали немало буказоидов

 

один из них и обломался

 

Прочитав инфу, которая и тебе станет доступной

чуть позже,

рой оказался бесплатным!

 

 

 

. Компонент

TICQClient оказался очень хорошим

я понял, что это именно то,

что нужно

клиента. Он включает все необходимые

инструментом для создания

полноценного(!!!)

 

. Качай

 

.cobans.net/ è

 

 

 

 

 

 

åãî ñ http://www

 

 

-

возможности и при этом прост в использовании

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Заметь,

что к компо

. На данном этапе проблем возникнуть не должно

 

 

 

устанавливай

 

 

 

 

 

 

 

 

 

. Îäèí èç íèõ è åñòü ïî÷-

ненту прилагается ФАК на русском языке, а также

два примера

 

 

 

 

 

 

. Обязательно взгляни на него. Там же ты найдешь и инфу

ти полноценный ICQ-клиент

 

вещам.

 

 

 

 

 

по компоненту, протоколу и другим полезным

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рождаем Асю

 

 

делать нечто большее. Помнишь, Х писал

 

Итак, раз клиент у тебя есть, тогда научимся

 

 

 

 

 

 

 

 

 

 

ïî èõ

 

о программе, которая умела рассылать

сообщения, находя нужных пользователей

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

инфе? Об этом мы сейчас и поговорим

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Что делает наша тулза:

 

 

 

 

 

 

 

 

 

 

1) Дает возможность выбирать различ-

 

 

 

 

 

 

ные параметры поиска (для примера я

 

 

 

 

 

 

взял два: страна и возраст - этого хватит).

 

 

 

 

 

 

2) Дает возможность

ввести сообщение с

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

последующей вставкой туда ника жертвы

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

3) Ищет/рассылает

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

...

 

 

 

 

 

 

 

 

 

 

 

 

Готов? Поехали

 

 

 

 

 

 

 

 

 

 

 

 

Первым делом создай новый проект и

 

 

 

 

 

 

кинь на него компоненты, расположенные

 

 

 

 

 

 

как на скриншоте 1.

 

 

 

 

 

 

 

 

 

 

 

Edit’ы называй: LoginEdit,

PasswordEdit,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

CountEdit и MessageEdit, соответственно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

Два компонента TComboBox так и оставь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. И самое

 

 

 

 

 

 

Теперь добавь кнопку и TMemo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Все. Получилось?

 

Так выглядит будущая программа

 

 

главное - TICQClient

 

 

 

 

 

 

 

Отлично.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подводные камни

 

первая и самая важная - при

Создавая эту программу, я столкнулся с рядом трудностей:

 

 

 

 

 

 

 

 

 

поиске пользователей

мы обращаемся непосредственно

к серверу ICQ, а он работает

 

 

как ты искал

пользователей

 

 

 

 

 

 

 

 

. Каждый раз выдает не все UIN’ы (вспомни,

 

 

 

 

 

очень странно

 

 

 

уже совсем другие

(на самом деле частенько

в своей

аське), а при повторном поиске -

 

 

 

 

 

 

-

бывает

так, что в результате поиска найдено

очень много пользователей,

поэтому сер

 

 

 

они не повторялись

- ïðèì.

вер и выдает разные юины, чтобы при

следующем поиске

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ред.). Т.е. нам придется самим задавать

примерное количество поисковых сеансов, да

.

еще и отфильтровывать дубликаты!

Второе - задание мессаги. Об этом позже

 

 

Поехали!

TICQClient. В поле ICQServer и ICQPort введи

login.icq.com

Открой свойства компонента

 

 

 

 

÷òî-

 

 

 

. Теперь исправь поле VAR перед кодом, чтобы получилось

 

 

 

и 5190 соответственно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

то вроде:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

var

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Form1: TForm1;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

UinS,NickS: TStringList;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Здесь мы создаем два строковых списка. Зачем

они нужны, ты узнаешь позже. Теперь

 

 

 

.

 

 

 

 

 

 

 

 

 

мы напишем несколько

функций, с которыми будем работать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поиск

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Работает она очень

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Эта функция

будет необходима для проверки UIN’ов на дубликаты

 

 

 

списке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с полученными ранее в

просто:

получая нового пользователя, мы сравниваем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

список (NickS) пишем ник. Глянь

UinS. Если его там нет, то добавляем его, а во второй

 

 

 

 

 

 

 

 

 

 

 

 

на Листинг 1, там все предельно

ÿñíî.

 

 

 

 

 

 

 

 

 

. Нам будут нужны

 

 

 

 

 

 

 

 

 

 

 

 

Теперь я должен задержаться на моменте добавления

новых строк

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

. Я просто загоняю их в два списка и потом обраща

ник и юин для отправки сообщений

 

 

 

 

 

 

 

 

 

 

вернет (точнее, за-

юсь непосредственно

к ним. Если в инфе не указан ник, то функция

 

 

 

 

 

 

 

для удобства.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

пишет) *. Это просто

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Изменение сообщения

 

 

 

 

в новый, с

Эта функция необходима для преобразования

текста

в твоем MessageEdit

 

 

 

â ìåñ-

 

 

проверку на вставленные

учетом ника. Для примера в этой

программе я сделал

 

íèê

 

такое сочетание

будет заменено на реальный

садж «$Nick» - каждое найденное

 

 

 

 

 

 

этом месте

автор имел в виду ис-

пользователя,

которому отправляется сообщение (в

 

 

 

 

«Привет,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. К примеру:

пользование небольшого регулярного

выражения - прим. ред.)

 

 

 

 

 

 

 

 

$NICK». Этот код смотри в Листинге 2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Основной кодинг

 

 

 

 

поиска: добавить еще

Теперь мы

почти готовы, осталось только объявить параметры

 

 

 

 

 

 

 

 

 

из модуля ICQWorks, который необходимо

дописать в раздел uses твоей

три функции

 

критерии (Листинг 3). Там

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Две функции создают в ComboBox1 возрастные

 

 

 

 

 

 

 

 

 

программы

 

 

 

 

 

 

 

 

. Теперь создай обработчик события OnCreate у

все очень просто, так что

я промолчу

 

 

Все! Приготовления окончены!

 

 

 

 

формы. Впиши туда содержимое

Листинга 4.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Вставляй

туда Листинг 5. Что мы

Создай обработчик события OnClick у первой кнопки

 

серваку.

Теперь

 

создавай

там делаем: берем наш

юин и пароль,

коннектимся к

 

Листинга 6. Осталось только добавить код

ICQClient OnLogin è ïèøè

туда содержимое

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для обработчика события OnUserFound

компонента ICQClient1:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

80

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Работаем-с, господа...

if Nick=’’ then //если Ника нет, то мы будем вставлять «*» SearchList(Uin, ‘*’) else

SearchList(Uin, Nick); //здесь мы начинаем проверку на дубликаты

Завершение

Вот и все! Теперь ты получил быстро работающую программу. Немного доработай ее, и получишь отличную софтину, которая даст тебе возможность похвастаться перед друзьями и быстро разослать тонну спама. Хочу лишь заметить, что не стоит увлекаться массовой рассыл- кой... Помни: этот пример не для засорения Сети. Удачи!

Листинг 1

 

 

 

 

function

 

 

 

 

 

 

 

 

SearchList(SUin:string; SNick:string):string;

 

var j:integer;

 

 

 

 

 

flag:

boolean; //эта переменная нам нужна для

определения дубликата

begin

 

 

 

 

 

 

flag:=true;

 

 

 

 

for j:=0 to UinS.

 

 

 

begin

 

 

 

Count-1 do //перебираем весь список

if

SUin=UinS.

 

 

 

 

строке, то

Strings[j] then //если новый UIN (юин в

дальнейшем) = какой-то

begin

 

 

 

 

 

 

 

flag:=false; //флаг возвращает «фальшь»:)

 

 

end;

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

if flag then

//иначе

 

 

 

UinS.

 

 

 

 

 

 

 

 

Add(SUin);

//добавляем юин и

ник под единым номером.

NickS.

 

 

 

 

Add(SNick);

 

 

 

end;

 

 

 

 

 

 

 

Листинг 3

 

 

 

function TForm1.

 

 

 

begin

 

 

 

GetAgeMin: Word;

 

 

 

case ComboBox1.

 

 

 

 

1: Result

 

ItemIndex of

 

 

 

 

:= 18;

 

 

 

 

2: Result := 23;

 

 

 

3: Result := 30;

 

 

 

4: Result := 40;

 

 

 

5: Result := 50;

 

 

 

6: Result := 60;

 

 

 

else

 

 

 

 

 

 

 

Result :=

0;

 

 

 

 

end;

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

function TForm1.

 

 

 

 

begin

 

 

GetAgeMax: Word;

 

 

 

case ComboBox1.

 

 

 

 

 

 

 

 

ItemIndex of

 

 

 

1: Result := 22;

 

 

 

2: Result := 29;

 

 

 

3: Result := 39;

 

 

 

 

4: Result := 49;

 

 

 

 

5: Result := 59;

 

 

 

 

6: Result := $2710;

 

 

 

else

 

 

 

 

 

 

 

Result := 0;

 

 

 

 

end;

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

Листинг 5

 

 

 

if LoginEdit.

 

 

 

 

 

 

 

 

Text=’’ then

 

 

 

ShowMessage(‘Error! Enter UIN!’)

 

 

 

else

 

 

 

 

 

 

 

 

Memo1.Clear;

 

 

 

 

 

ICQClient1.

 

 

 

 

 

 

ICQClient1.

UIN:=StrToInt(LoginEdit.Text);

 

 

 

 

Password:=PasswordEdit.Text;

 

 

ICQClient1.Login(0);

//логинимся к серверу в статусе Online

Листинг 2

 

function Replace(ZNick:string;

ник и то, что будем

менять

var Poz:integer;

 

s:string;

 

begin

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

Repl:string):string;//как параметры мы задаем:

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

s:=Form1.

 

 

//задаем строку

MessageEdit.Text;

Poz:=Pos(Repl, s);

тексте присутствует указание на ник, то...

while Poz>0 do

//åñëè â

//...

 

будет

begin

ïîêà îí

 

 

 

 

if Repl=’*’ then //åñëè íèêà

íåò, òî…

begin

 

 

 

Delete(s, Poz, Length(Repl)); //удаляем старое

Insert(‘ ‘, s, Poz); //вставляем пробел

end

 

 

 

else

 

 

 

begin

 

 

 

Delete(s, Poz, Length(Repl));

 

 

Insert(ZNick, s, Poz); //пишем реальный ник пользователя

end;

 

 

 

Form1.

 

//готовим мессагу

MessageEdit.Text:=s;

Poz:=Pos(Repl, s); //переводим поиск на новое место

end;

 

 

 

end;

 

 

 

Листинг 4

 

 

 

 

 

 

procedure TForm1.

 

 

 

 

 

 

var

 

 

FormCreate(Sender: TObject);

 

 

 

i:integer;

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

UinS:=TStringList.Create; //создаем список

 

 

 

 

NickS:=TStringList.Create; //аналогично

 

 

 

 

ComboBox1.

 

 

//выводим возраст

 

 

 

 

 

 

 

Items.Add(‘’);

 

 

 

 

ComboBox1.

 

 

 

 

 

 

 

 

 

 

ItemIndex := 0;

 

 

 

 

ComboBox1.Items.

 

 

 

 

 

 

 

 

 

 

Add(‘18-22’);

 

 

 

 

ComboBox1.Items.

 

 

 

 

 

 

 

 

 

 

Add(‘23-29’);

 

 

 

 

ComboBox1.Items.

 

 

 

 

 

 

 

 

 

 

Add(‘30-39’);

 

 

 

 

ComboBox1.Items.

 

 

 

 

 

 

 

 

 

 

Add(‘40-49’);

 

 

 

 

ComboBox1.Items.

 

 

 

 

 

 

ComboBox1.

Add(‘50-59’);

 

 

 

 

 

 

 

Items.Add(‘60 and above’);

 

 

 

 

ComboBox2.

 

 

 

 

 

 

 

 

 

 

Items.Add(‘’);

 

 

 

 

 

ComboBox2.

 

 

 

 

 

 

 

 

 

 

ItemIndex := 0;

 

 

 

 

for i := Low(Countries) to

High(Countries) do //выводим страны

 

 

ComboBox2.Items.

 

 

 

end;

 

Add(Countries[i].Value);

 

 

 

 

 

 

 

 

 

 

 

 

 

Листинг 6

 

 

 

 

 

 

 

procedure TForm1.

 

 

 

 

 

 

 

var

 

 

ICQClient1Login(Sender: TObject);

 

 

 

i:integer;

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

for i:=0 to

StrToInt(CountEdit.TExt) do //сколько раз искать

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

ICQClient1.

 

 

 

 

 

 

 

ems.

 

 

SearchWhitePages('','','','',GetAgeMin,GetAgeMax,0,'','',ComboBox2.It

 

Strings[ComboBox2.ItemIndex],'','','','','','','','','',true);

//собственно,

функция

поиска

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

for i:=0 to UinS.

 

 

 

 

 

 

 

begin

 

 

Count-1 do //далее идет проверка на дубликаты

 

 

 

 

 

 

 

 

 

 

 

 

if i=0

then //åñëè ýòî

первый

найденый юин, то мы

заменяем $Nick на новое

 

значение...

 

 

 

 

 

Replace(NickS.

 

 

 

 

 

 

 

else

 

 

Strings[i],'$Nick')

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

Replace(NickS.

 

 

 

 

 

 

 

следующее

Strings[i],NickS.Strings[i-1]); //åñëè æå íåò, òî

заменяем

предыдущим

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

ICQClient1.

 

 

 

 

 

 

 

 

 

 

SendMessage(StrToInt(UinS.

 

 

 

 

рассылки

сообщений

 

 

Strings[i]),MessageEdit.Text);

//функция

Memo1.Lines.Add('Послано

 

сообщение

íà

'+UinS.Strings[i]+':

'+MessageEdit.Text); //добавляем инфу о проделанной работе

 

 

end;

 

 

 

 

 

 

 

 

 

 

ICQClient1.

 

 

 

 

 

 

 

 

UinS.Free;

Disconnect; //отключаемся

 

 

 

 

 

 

 

 

 

 

 

 

 

NickS.Free;

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

81

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

o

 

 

P

 

 

 

 

 

 

NOW!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

to

BUY

 

 

 

 

 

Кодинг

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Click

 

 

 

 

 

 

 

 

w

 

 

 

 

 

o

m

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

g

 

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

КРИПТОГРАФИЯ В С++

 

 

 

 

 

 

 

 

 

 

 

 

 

Криптография

 

 

 

 

 

 

 

 

Николай «GоrluM» Анд еев (gorlum@xakep.ru)

 

 

 

 

 

 

 

 

 

 

 

 

Ñ++

â

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

В последнее время

единственным способом защиты

информации стала

 

 

свои пароли, любой

 

 

 

 

 

 

 

 

 

. Все шифруется: windows и unix защищают

 

 

 

криптография

 

 

 

 

 

наверняка пользовался

-магазин - номера кредитных карточек, а ты

 

 

 

 

 

îíè

интернет

 

статье я расскажу

о том, какие бывают шифры, как

 

услугами PGP. В этой

 

 

 

 

 

 

 

. Íà

примере

работают,

è êàê èõ

можно реализовать в своих

программах

 

 

 

Ñ++

больше чем другие

 

 

 

÷òî

шифрующей файл программы ты убедишься,

 

 

 

 

.

 

 

 

 

 

языки подходит для криптографии

 

 

 

 

 

 

 

 

 

.ru)

 

 

 

 

 

 

 

 

 

Николай «GоrluM» Андреев (gorlum@xakep

 

 

 

 

 

 

 

Важные письма шифровались

еще во времена Цезаря. Шифры были несложные,

è â

 

 

 

 

 

. Например, в Древнем

íàøè äíè

даже ребенок справился бы с ними за

пару минут

 

 

служил алфавит со сдвигом на три буквы

(D вместо A и т.д.). К счастью,

Риме шифром

 

 

 

 

 

 

:). Теперь создана куча других,

криптоалгоритм Цезаря сейчас никем не используется

 

 

 

очень и очень

сложных шифров, и нам предстоит

не только разобраться в принципах

 

 

.

 

их работы, но и реализовать один алгоритм

в собственной программе

 

 

 

 

 

 

Асимметричные

 

 

 

шифры

 

 

 

 

 

 

 

 

 

и симметричные

 

 

что-либо одним

 

Представь себе криптоалгоритм,

с помощью которого ты шифруешь

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ключом, а расшифровываешь

уже совсем другим. Такой шифр называется

асимметрич

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ключом (public key). Почему его так

 

íûì.

Ключ, которым шифруют, называют открытым

имея открытый ключ, ты все равно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

называют? Потому что он раздается всем. Но даже

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

не сможешь расшифровать информацию

за разумное время, не имея второго ключа.

 

 

 

 

 

ó ñåáÿ

на домашней страничке и просить

 

Открытый ключ можно спокойно выкладывать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(pri-

 

посылать тебе письма, зашифрованные

им. Второй же ключ называется закрытым

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

зашифрованную

 

 

. Именно с его помощью ты сможешь получить информацию,

 

 

 

 

 

 

 

 

â

 

vate key)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шифра - это RSA, используемый

 

первым ключом. Типичный пример асимметричного

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

PGP. Основной задачей таких шифров является

защита передаваемой информации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Симметричный

шифр, как ты, наверное, догадался - это шифр,

использующий для

 

 

совершенно

íå

 

 

 

 

 

 

îäèí è òîò æå êëþ÷.

Такие шифры, имхо,

шифровки и расшифровки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. К примеру, если для шифров-

подходят для передачи шифрованной

информации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

áû

îäèí

ключ, тогда для отправки шифро-

ки/расшифровки

письма использовался

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Учитывая, что

 

 

 

придется

посылать и код

 

 

 

 

 

 

 

 

 

ванного письма тебе

для его дешифровки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

локалку

в надежде выловить хоть

враги постоянно

прослушивают сниферами мою

 

 

 

 

 

 

 

 

 

 

 

 

 

 

становится

 

 

 

 

 

 

 

 

 

 

 

 

 

.

Но! Такие шифры идеально

что-то ценное, это

просто несерьезным

 

 

 

 

 

расположенной

ó

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Ò.å. äëÿ èíôû,

подходят для шифрования статичной информации

 

 

 

 

 

 

 

 

 

 

 

 

-

тебя на харде, которую ты не собираешься

никуда таскать, но при этом хочешь дер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

жать ее защищенной

от чужих глаз.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

Теперь я расскажу, как написать программу,

шифрующую файл именно симметрич

 

 

 

 

 

 

 

что для расшифровки

 

 

 

.

Причем

этот шифр настолько симметричен,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

ным шифром

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

потребуется всего лишь повторить

операцию шифровки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Пишем шифровщик

 

 

 

 

 

 

простых, но

â

òî

Наша программа

будет реализовывать, наверное, один из самых

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- XOR (на самом деле шифро-

же время

очень популярных алгоритмов шифрования

 

 

использовать этот

метод,

 

 

 

 

 

трудно, но некоторые кодеры любят

ванием

это назвать

 

 

 

 

 

 

 

 

 

 

.

хотя в серьезных продуктах такое вряд

ли когда-нибудь встретится

- ïðèì. ðåä.)

 

 

 

 

 

 

 

логический

оператор «поразрядное

Название его говорит

ñàìî çà ñåáÿ, XOR - ýòî

 

 

 

 

каждый

символ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мы будем шифровать

исключающее ИЛИ». Именно с его помощью

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

îäèí áàéò, ò.å.

файла с ключом - другим символом

 

 

 

â âèäå

числа, занимающего

Символ в программе Си представляется

 

 

 

 

 

ò.å.,

имея два двоичных числа, ты можешь

8 бит. xor - это поразрядный

оператор,

 

операцию с каждым разрядом обоих чисел:

получить третье, выполняя следующую

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 íà 0 = 0 0 íà 1 = 1 1 íà 0 = 1 1 íà 1 = 0

 

 

 

 

 

 

 

. Чтобы проксорить два чис-

В Си оператор xor выглядит как знак «^»

(без кавычек)

 

 

íàïè-

ла b и с (любого типа, двоичные

разряды оператор получит сам), необходимо

 

 

 

èìåÿ äâà

символа, символ начальный

и символ-

сать a = b ^ c. Соответственно,

 

 

 

 

 

 

символ и записать его в символ началь-

ключ, мы можем получить зашифрованный

 

строка упрощается

äî sim ^= key.

ный. Вот пример: sim = sim ^ key. В C++ такая

 

программе

 

 

Это простое выражение уже шифрует

один символ с другим. Нашей же

 

 

 

 

 

 

 

ñèì-

понадобится зашифровать

целый файл с ключом любой длины (т.е. не одним

 

 

 

 

 

 

 

 

 

 

 

 

волом), заданным тобой.

 

 

 

 

 

 

 

 

 

 

 

Коротко о проекциях файлов

 

 

Для открытия файла мы

воспользуемся API функцией CreateFile,

в первом парамет-

 

файла, например:

 

 

 

 

полное имя

 

открываемого

 

 

ре которой

будет содержаться

 

 

 

 

 

 

символ «\»

 

пишешь строку прямо в программе,

 

 

.txt». Заметь, когда

 

÷òî ýòî

êà-

 

«C:\\password

 

 

 

 

 

 

 

 

компилятор не поймет и подумает,

 

нужно заменить символом «\\», иначе

 

 

 

 

 

 

перевода каретки). Функция CreateFile

 

кой-то спецсимвол (например, «\n» - символ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

вернет нам хэндл открытого для чтения и записи файла

hFile, после чего это значе

 

 

 

 

 

 

 

 

 

 

. È

 

ние мы передадим функции GetFileSize для того,

чтобы узнать

размер файла

 

создадим его

 

 

 

.

 

 

только теперь, открыв файл и зная его размер,

ìû

ПРОЕКЦИЮ

 

 

 

 

 

удобно редактировать

 

 Windows

åñòü

замечательная

технология, позволяющая

 

точнее, связывая неко-

 

любого размера, проецируя

их в память,

файлы фактически

 

Технология работает

 

 

 

 

 

 

файлом на жестком

диске.

торое адресное пространство с

 

 

 

 

 

 

 

 

 

 

-

почти как виртуальная

 

память, за исключением

 

того, что в нашем случае адресует

 

 

 

файла (читай свопа), а открытый файл.

 

 

 

 

 

 

 

ся не кусок страничного

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в первом параметре

Проекцию мы создаем с помощью функции CreateFileMapping,

 

 

 

 

 

 

 

 

передавая

хэндл открытого нами файла, а в пятом

- размер региона, выделяемого

 

 

 

 

 

 

 

нам вернет хэндл

В данном случае он

равен размеру

файла. Функция

ïîä ôàéë.

 

 

 

 

функции MapViewOfFile,

проекции (маппинга),

который впоследствии мы передадим

 

 

 

 

 

 

 

 

 

 

 

 

 

на маппинг в виде одной строки, т.е. массива символов,

чтобы получить указатель

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в файле.

 

 

при редактировании

которого все изменения тотчас же отражаются

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Коротко об указателях

 

 

 

 

 

Если ты когда-нибудь

видел хотя бы один исходник на C++, то

мог заметить значок

 

разного типа. Этот

 

 

 

 

 

 

некоторых переменных

«*», который ставят перед объявлением

 

 

 

 

 

 

 

 

является указателем, т.е. переменной,

значок показывает, что данная

переменная

 

 

 

. Например,

ÿ ïèøó:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

адресующей данные в определенное

место памяти

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

char *str = «строка»;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

В переменной

str сохраняются

не все семь символов строки, а только

адрес распо

 

 

 

 

 

 

 

 

 

 

 

 

char - это только один символ, для сох-

ложения этой строки в памяти. Поскольку

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

íà

ранения целой строки используется

массив элементов типа char или указатель

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

82

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

Click

to

BUY

 

 

 

 

m

Кодинг

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

КРИПТОГРАФИЯ В С++

Николай «GоrluM» Андреев (gorlum@xakep.ru)

До шифрования файла

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Вот как будут выглядеть шифрованные

файлы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

è êîëè-

 

 

 

 

 

 

 

. Но в случае с массивом ты заранее указываешь

длину строки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

этот массив

 

 

а с указателем дело обстоит сложнее. Например,

мы создали

 

 

 

 

 

чество элементов,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

массив символов, но в

 

 

 

 

 

проекцию

файла и получили на нее указатель как на строку,

 

 

 

 

 

 

 

 

 

 

 

является массив символов, оканчивающийся

нулевым элементом (пишут

 

 

 

 

 

си строкой

может быть где угодно, не

 

 

 

 

 

 

 

же, в отличие от строки, такой

элемент

 

 

 

 

 

«\0»). В файле

 

 

использовать сишные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обязательно в конце. Такой расклад не дает нам возможности

 

 

 

-

После шифрования

 

 

 

строковые

функции с указателем

на проекцию, так как они определяют длину

ñòðî

 

 

 

 

äî \0. Íî

èìåÿ

размер нашего файла, мы мо-

 

 

 

 

-

 

 

 

 

 

 

 

 

 

ки как расстояние

от начала массива

 

 

 

 

 

 

(íàï-

 

 

 

. Двухме

 

массива, и это не приведет к ошибкам

Декриптовать зашифрованный

текст можно, повторно запустив программу

 

жем вручную обращаться к элементам

 

 

файл она делала

 

 

 

 

 

 

.

 

 

 

говый

файл наша прога криптует за мгновение ока, а стомеговый

 

 

 

 

 

попытке открыть несуществующий

элемент массива)

 

 

 

 

 

 

 

ример, при

 

 

 

 

 

 

 

 

около десяти секунд. Имхо, неплохо.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Шифруем

 

 

 

 

 

 

 

 

 

 

 

размер, мы можем приступить

 

Реализация сложных

 

 

 

 

 

 

 

 

Если есть указатель на массив символов файла и его

 

криптоалгоритмов

 

 

 

 

 

 

 

 

 

 

 

 

 

функцию, в

парамет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Для этого очень удобно сделать специальную

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мы разобрались, а как быть

со сложными? Ведь

к шифрованию

 

 

 

передавать:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

С простыми криптоалгоритмами

 

 

 

 

 

. Òàê,

рах которой мы будем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для их реализации требуется знание не

только языка, но и высшей математики

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

число

 

 

 

на шифруемую строку

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

например, для генерации

ключа для алгоритма RSA требуется найти простое

 

1) Указатель

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

от стойкости криптоалгоритма),

à ýòî íå òàê

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

длиной около 512 бит (в зависимости

 

 

 

 

2) Длину этой строки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сложный криптоалгоритм,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

легко сделать. На написание

программы, реализующей

3) Указатель

íà êëþ÷

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Но здесь нам

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ушло бы очень

много времени, и в одной статье это

не поместится

 

 

- ýòî ÷àùå

4) Длину ключа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ÊÏ)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

Криптопровайдер (далее

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ìàñ-

на помощь приходят криптопровайдеры

 

 

 

 

 

 

расшифровки,

генерации

 

 

 

 

 

 

 

С++ позволяет записать ВСЮ функцию

шифрования

всего просто

библиотека готовых функций шифрования,

Мощь синтаксиса языка

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

заданной тобой длины в

ОДНУ СТРОКУ,

не считая

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Если поискать

в Сети, таких провай

сива символов ксором с ключом

 

 

 

 

 

 

ключей для существующих криптоалгоритмов

всего использовать КП

от фирмы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

деров можно найти очень много,

íî

 

удобнее

объявления функции. Вот как это будет выглядеть:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Набор функций, ис-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Он уже встроен в Windows и готов к

употреблению

 

ты можешь за-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if(t

>= szkey) t = 0;

 

 

 

 

 

Mircosoft

 

 

 

 

 

называется

 

CryptoAPI, и с его помощью

 

for(int i = 0,t = 0; i < szin; in[i++] ^= key[t++])

 

 

 

 

 

пользующих Windows КП,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Единственный недос-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

шифровать все что угодно и практически

любым алгоритмом

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

îáú-

 

 

 

а это может вызвать

 

 

 

 

 

 

 

узнал, а вот назначение таких хитрых выражений я сейчас

таток криптоапи - поставляется он без исходников,

недоверие

Цикл for, ты, конечно,

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

приведя аналогию с более простым

циклом while.

 

Но на этот случай можно воспользоваться

набором очень качественно реализован

ясню. Легче всего это сделать,

 

 

 

 

 

 

 

 

Вот точный урл на документацию к нему:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

openssl.org.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3) оператор;

 

 

 

 

 

 

 

 

ных алгоритмов проекта www.

 

 

 

 

 

.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for(выражение

1; выражение 2; выражение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://www

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.ru ты можешь скачать исходник

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

это то же самое, что:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Но я предпочитаю

CryptoAPI. C сайта www.xakep

 

 

 

 

 

 

бинарником се-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Там же скачивай исходник с

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

программы,

использующий

криптоапи

 

 

с подробными комментариями!

выражение

1;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

годняшней

программы шифрования

файла. И

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2){

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

while(выражение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

оператор;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выражение 3;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Так станет

понятнее, что же делает приведенный

 

цикл. По началу он объявляет пе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

äî òåõ ïîð, ïîêà i

íå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i и t, затем

начинает цикл, который будет длиться

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ременные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(передаваемая в параметрах

функции длина шифруе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

станет больше или равна szin

 

 

 

 

 

 

 

 

 

 

êëþ-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Далее в цикле ксорится i-ый элемент массива с t-ым элементом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мой строки)

 

 

 

 

 

 

i и t повышаются на один. При этом если

счетчик t станет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ча. Потом оба счетчика

 

 

 

 

 

 

îá-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(тоже передается

в параметрах), то t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вдруг

больше или равен длине ключа szkey

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нулится. Таким образом этот несложный

цикл ухитряется шифровать, а при повтор

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ном вызове расшифровывать

строку с ключом любой длины

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. И запускаться, соответственно,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Наша программа - консольное Win32-приложение

 

первое

значение аргумента

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

будет из

командной

строки.

 

При запуске она берет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а второй

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

содержащий

ïóòü ê

файлу, и пытается его открыть,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(argv[1])

за параметр,

 

 

 

ôàéë

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

êëþ÷.

Например,

чтобы

зашифровать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

аргумент

(argv[2])

-

 

шифрующий

 

 

 

Все работает!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.txt, необходимо запустить программу следующим образом:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C:\password

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.txt êëþ÷

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

crypto.exe C:\password

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

84

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

D

 

 

 

 

 

 

 

 

o

 

 

 

 

NOW!

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NOW!

r

 

 

 

 

 

BUY

 

 

Break

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

o

Åñëè

возникнут

какие-то

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

o

 

w

 

 

 

 

 

 

 

 

 

вопросы,

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

связанные с

алгоритмами

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

 

шифрования или

 

 

p

df

 

 

 

 

e

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

нашей программой, пиши.

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обязательно отвечу.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подробную информацию по

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

àïè

функциям,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

приведенным

 

в статье, и, кстати,

ïî

криптоапи, ты

сможешь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

найти в MSDN (msdn.

microsoft.com) íà

сайте или

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Visual

Studio (ýòî

 

на диске, прилагающемся к

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

неправда, обычно в

палатках VS всегда сильно

урезан,

à

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MSDN покупается

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

отдельно

на 3-4 дисках - прим. ред.). Но

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

редить: в нашей

стране,

 

я хочу тебя предуп-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

согласно указу ¹334 от 3 апреля 1995 года, произво-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дить и распространять любые

шифрующие средства можно, только имея ли-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

цензию ФАПСИ.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Соответственно,

шифровать нельзя :). Поэтому пиши прог-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

раммы только для личного пользования

и только в

познавательных целях.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

На этом все. Удачного компилирования.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Листинг программы шифрования файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Мы будем использовать WinAPI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include <windows.h>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Код шифрующей функции

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void

code(char *in,int szin,char *key,int szkey){

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

for(int i

= 0,t = 0; i

< szin;

in[i++] ^= key[t++]) if(t >= szkey) t = 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//точка входа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int main(int argc, char **argv){

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Открываем файл

для чтения и записи

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HANDLE

 

 

 

 

 

 

 

 

hFile

 

 

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CreateFile(argv[1],GENERIC_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WRITE|GENERIC_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Получаем его

размер

 

 

READ,0,0,3,0,0);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DWORD dwFileSize

=

GetFileSize(hFile,0);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Создаем проекцию

файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HANDLE hFileMap =

CreateFileMapping(hFile,0,4,0,dwFileSize,0);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Получаем указатель на проекцию

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

char* cFile = (char*)MapViewOfFile(hFileMap,2,0,0,0);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Шифруем всю

проекцию

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

code(cFile,dwFileSize,argv[2],strlen(argv[2]));

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//После

использования файл и проекцию

требуется

закрыть

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Ставим

EOF, закрываем

ôàéë

и его проекцию

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

UnmapViewOfFile(cFile);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SetFilePointer(hFile,dwFileSize,0,0);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SetEndOfFile(hFile);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CloseHandle(hFileMap),CloseHandle(hFile);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

return 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Tips&Tricks

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ты нашел какую-либо шаровар-

 

денькой, то вышлет тебе какой-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ную англоязычную прогу, но кря-

 

нибудь файл, который надо пе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ка на нее пока не существует? Я

 

ревести

(äà

 

поможет

òåáå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

подскажу тебе способ, с по-

 

ПРОМТ!). Ты его переводишь и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мощью которого можно полу-

 

отправляешь ему. И так ненавяз-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чить и серийник, и техподдерж-

 

чиво просишь, мол, сами мы не

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ку. Мылишь

производителю

 

íà

 

местные... хочу небольшого воз-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

английском что-то типа: "Ми-

 

награждения за свой труд - выш-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лый, дорогой девелопер! Ваша

 

лите серийник, добрый дядя де-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

прога пользуется офигительным

 

велопер. Все! :)) Сериал выш-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

успехом среди русских пользо-

 

лют, поблагодарят, да еще и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вателей, но русского интерфей-

 

скажут что-то типа "надеемся на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

са так и нет... Разрешите мне

 

плодотворное сотрудничество".

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сделать перевод интерфейса на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

русский язык". Вот так. Если

 

 

Сергей aka Sergeevich

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

разработчик

будет

добрым

äÿ-

 

 

www.s-image.narod.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

Кодинг

 

 

 

 

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

w

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

t?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sh

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

 

 

 

la

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

w Click

 

 

 

 

 

 

o

m

 

 

 

 

S

 

 

 

 

 

 

w Click

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

SLASHDOT? НА PHP - ХАЛЯВА!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Никита «Nikitos» Кислицин

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

âà

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ëÿ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(nikitoz@real.xakep.ru) http://nikitos.inc.ru

 

 

P

- õà

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

à

PH

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Í

 

 

 

 

плане стоят вещи, без которых

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

современной жизни на первом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В нашей

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Одна из таких вещей - мобила

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

человек уже не

способен обходиться

-то мобила была в диковинку

è

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Cегодня

народ уже не помнит, что когда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Äà,

ценности постепенно теряют свою

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

имелась лишь у избранных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

актуальность и дешевеют, а взгляды

людей на вещи меняются

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.inc.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.xakep.ru) http://nikitos

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Никита «Nikitos» Кислицин (nikitoz@real

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.org - популярный новостной портал с посещаемостью

50 млн. человек в

 

 

 

 

Slashdot

 

 

добились такого успеха, предоставляя

пользователям све-

 

. Авторы проекта

 

 

 

-

месяц

 

 

 

 

 

 

 

 

 

 

 

 

 

æèå

и интересные новости из мира IT, а также

возможность оставлять под публика

 

 

 

 

 

 

 

 

 

 

 

 

. Это очень важное обстоятельство, поскольку со

цией собственные

комментарии

 

 

 

 

 

 

 

 

общие интересы

 

посетители любого такого проекта, выявляя

временем постоянные

 

äàæå irc

 

 

 

 

 

 

 

 

. Íè e-mail, íè

и привязываясь к месту общения, образуют

единый социум

 

 

 

 

 

 

 

только здесь создана та неповто-

не могут им заменить такого ресурса,

поскольку

 

 

 

 

 

 

 

 

. Отсюда и 50

римая социо-информационная

среда, от которой

они просто тащатся

 

 

 

 

 

 

 

 

 

 

. К слову, нас-

миллионов посещений

в месяц. Верный подход, хорошая реализация

 

 

 

 

 

 

 

 

 

 

 

-òî, íåñ-

чет реализации - Slashdot написан на Perl. Мы же

реализуем эту, в общем

 

ложную задачу, на PHP. Увидишь - это просто

:).

 

 

 

 

 

 

 

 

 

 

 

 

 

Создание таблиц

 

 

 

 

скриптов, на-

Как я уже неоднократно

отмечал, прежде чем приступать к написанию

 

 

 

 

 

 

 

 

 

 

среды, в

которой они будут работать. В

до продумать структуру информационной

 

 

 

баз данных mysql, а информация,

нашем случае мы будем

иметь дело

с сервером

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

стало быть, будет храниться в таблицах

 

 

 

 

 

 

 

Таблица со статьями:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mysql> create table posts(

 

 

 

 

 

 

 

 

PRIMARY KEY,

 

-> pid INT NOT NULL AUTO_INCREMENT

 

 

 

 

 

 

-> aid INT NOT NULL,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-> cid INT NOT NULL,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-> text TEXT NOT NULL,

 

 

 

 

 

 

 

 

 

 

 

 

 

-> date DATE NOT NULL,

 

 

 

 

 

 

 

 

 

 

 

 

-> time VARCHAR(15)

NOT NULL,

 

 

 

 

 

 

 

-> timest INT NOT NULL);

 

 

 

 

 

 

 

 

 

 

 

Query OK, 0 rows affected (0.01 sec)

 

 

 

 

 

 

Pid - уникальный идентификатор

статьи, aid - автора, cid - рубрики, text - текст

 

 

 

 

 

 

 

.

 

статьи, date/time - время, timest - время по

unix-исчислению

 

 

 

 

 

 

 

Таблица с информацией

об авторах:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mysql> create table authors(

 

 

 

 

 

 

PRIMARY KEY,

 

-> aid INT NOT NULL AUTO_INCREMENT

 

 

 

 

 

-> fname VARCHAR(50)

NOT NULL,

 

 

 

 

 

 

-> email VARCHAR(50)

NOT NULL,

 

 

 

 

 

 

NOT NULL,

 

 

 

 

 

 

 

-> login VARCHAR(30)

 

 

 

 

 

 

 

 

 

 

NOT NULL,

 

 

 

 

 

-> password VARCHAR(20)

 

 

 

 

 

Query OK, 0 rows affected (0.01 sec)

 

 

 

 

 

 

aid - идентификатор

автора, fname - его имя. Email - адрес

электронной почты, login

 

.

- логин для входа в административный

интерфейс, password - пароль

 

 

 

 

 

 

 

Таблица с комментариями:

 

 

 

 

 

 

 

 

 

 

mysql> create table comments(

 

 

 

 

PRIMARY KEY,

 

-> coid INT NOT NULL AUTO_INCREMENT

 

 

 

 

-> pid INT NOT NULL,

 

 

NOT NULL,

 

 

 

 

 

 

-> aname VARCHAR(50)

 

 

 

 

 

 

NOT NULL,

 

 

 

 

 

 

-> aemail VARCHAR(50)

 

 

 

 

 

 

-> comment TEXT NOT NULL,

 

 

 

 

 

 

 

-> date DATE NOT NULL,

 

 

 

 

 

 

 

 

 

 

-> time VARCHAR(15)

NOT NULL,

 

 

 

 

 

 

-> timest INT NOT NULL);

 

 

 

 

 

 

 

 

 

 

Query OK, 0 rows affected (0.01 sec)

 

 

 

 

 

 

Coid - идентификатор

комментария, pid - идентификатор

статьи, к которой отно-

 

 

 

 

 

 

текст, date/time -

 

 

 

 

-

èìÿ

 

автора комментария,

comment -

 

 

 

сится комментарий,

 

aname

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

время, timest - время по unix-исчислению

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица с рубриками:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mysql> create table categories(

 

 

 

 

 

 

 

PRIMARY KEY,

 

 

 

 

 

 

 

 

 

 

 

-> cid INT NOT NULL AUTO_INCREMENT

 

 

 

 

 

 

 

 

 

 

 

 

-> category VARCHAR(30)

NOT NULL,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-> eids VARCHAR(50)

NOT NULL);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(0.00 sec)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Query OK, 0 rows affected

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Cid - идентификатор

рубрики, category - название рубрики, eids

 

- идентификаторы

 

 

 

 

 

 

 

 

 

 

 

редакторов рубрик.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Описание функций

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Система будет представлять

собой совокупность

четырех скриптов:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для вывода статей, поиска по ним и т.д.

 

index.php - главная страница сайта, скрипт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

admin.php - административный

скрипт.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

небазовые узкоспе-

 

config.php - скрипт конфигурации

 

 

котором хранятся все

 

.inc.php - ядро системы, файл, в

 

 

 

 

 

 

 

 

â

 

kernel

 

 

 

функции, написанные ранее программистом

для использования

 

циализированные

 

 

 

 

 

отпадает нужда

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-первых,

 

. Это очень эффективное и красивое решение. Во

 

 

 

 

 

 

 

 

è âñå,

 

системе

 

 

 

 

 

 

îäíè

и те же куски кода - один раз описал функцию

 

многократно выписывать

 

 

 

 

 

 

 

 

 

следуя этому приему, ты создаешь

красивые много-

 

 

 

 

. Во-вторых,

 

 

 

 

 

 

 

 

юзай на здоровье

 

 

 

 

 

 

 

 

 

 

 

приложения,

легкие в отладке и дальнейшей

уровневые,

хорошо масштабируемые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

человек без особых

 

. Внимательный

читатель и просто дальновидный

 

 

 

 

 

 

 

 

 

-

модернизации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

проблем найдет еще не один десяток преимуществ

такого подхода, мы же перей

 

 

нами новостном движке.

 

 

дем к описанию функций, используемых

 

в создаваемом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

connect(dbname)

- возвращает указатель на активное

соединение с БД dbname

 

 

 

 

 

 

 

 

 

 

статьи

 

 

 

 

 

 

 

 

- позволяет получить информацию об авторе

 

 

 

_by_aid(aid)

 

 

 

 

 

_author_info

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ìàñ-

get

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(aid). Îí

возвращает ассоциативный

по его универсальному идентификатору

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

сив, ключами которого являются имена соответствующих

полей таблицы

 

 

 

 

 

 

 

 

òðè

необязательных

showposts([category],

 

[start], [howmuch])

-

принимает

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выбираются статьи. Второй

 

. Первый указывает на раздел сайта, откуда

 

 

 

 

 

 

 

 

 

 

 

 

-

параметра

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и третий параметры позволяют

показывать

определенное количество статей (сколь

 

 

начиная со статьи, указанной парамет-

ко именно – указывает параметр howmuch),

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

ром start. Для всех параметров

предусмотрены значения по умолчанию

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выборку из БД по ее

уникальному

showpost(pid)

- показывает

 

статью, производя

 

 

 

 

 

 

идентификатору

pid.

-

выводит комментарии пользователей

 

к статье pid.

 

 

 

 

 

 

 

 

 

 

 

showcomments(pid)

 

 

 

 

.

 

 

 

 

 

addcommentform(pid)

- выводит форму для добавления комментария

 

 

статье

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- добавляет

комментарий к

addcomment(aname,

aemail, comment, pid)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pid. Все параметры являются обязательными

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

navigation - выводит навигационную

строчку.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

автора.

 

 

 

 

 

 

 

 

 

 

 

 

 

auth - выводит форму для аутентификации

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

athinfo(login)

- возвращает

ассоциативный массив с информацией

об авторе

 

 

комбинацией

 

 

 

 

 

 

 

 

 

 

 

в БД автор с такой

isadmin(login,passwd)

-

проверяет, есть ли

 

 

 

 

 

 

login/pass.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

автор

с идентификатором

aid в качестве

iseditor(aid, cid) - проверяет, указан ли

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

редактора раздела cid.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Аналогичным образом определяются

 

остальные блоки. При этом желательно

ñîá-

 

 

 

 

 

 

 

 

 

 

 

должны работать

на одном логичес-

людать согласованность функций, т.е. все они

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

ком уровне, и результаты

работы одних будут входными параметрами

для других

 

 

 

 

äå-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.inc.php, хотя, на самом

Все блоки

принято сохранять в файле с расширением

 

 

 

 

 

позволял клиентам

 

 

 

 

 

 

 

 

 

 

 

 

Важно лишь, чтобы

вебсервер не

ле, это абсолютно неважно.

 

 

 

 

 

 

 

 

 

 

 

-òî îò-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. Но с другой стороны, надо же как

 

 

просматривать содержимое этого файла

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

86

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

Постим новость

Запостили, но в кривой кодировке :)

Кодим-кодим наш новостной движок

 

 

личать

 

 

 

 

 

 

 

 

 

 

 

 

выполняемый скрипт, обрабатывающий данные и ге-

нерирующий

выходной поток, от модульного

файла, в

êîòî-

ром содержатся лишь блоки кода.

 

 

 

Èòàê, åñòü

ôàéë,

 

в котором описан ряд высокоуровневых

 

 

 

 

функций. Для

 

 

 

 

 

было использовать

â îñ-

тальных

 

 

 

того чтобы их можно

скриптах,

этот файл необходимо подключить к сце-

нарию при

 

 

 

 

помощи

функции require(filename).

После этого в

сценарии

 

доступны

âñå

описанные

функции.

Ò.å. äëÿ

òîãî,

чтобы,

 

 

 

 

 

 

 

 

 

пользователю последние 10 статей

скажем, вывести

достаточно набрать:

 

 

 

 

 

<? require(kernel.inc);

 

 

 

 

connect(db);

 

 

 

 

 

 

 

 

 

showposts(); ?>

 

 

 

 

 

 

 

Скрипты

index.php и admin.php будут строиться следующим

образом.

Â

зависимости от передаваемого параметра

do,

скрипты будут

ïðè

помощи уже написанных функций выпол-

нять различные

 

действия: либо показывать

конкретную

статью, либо

 

 

 

 

 

 

 

 

 

âû-

 

 

 

осуществлять навигацию/поиск по архиву,

полнять административные задачи и

т.п. Этим мы в следую-

ùèé ðàç è

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

займемся - свяжем написанные функции в единую

систему, что в

 

 

 

 

 

 

 

 

ïî-

 

 

 

будущем поможет тебе сделать проект с

сещаемостью не 50, а 150 млн. хостов в месяц.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

Исходник

kernel.inc.ru

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

 

 

 

 

 

 

o

 

<?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p

df

 

 

 

g

.c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

function connect($db)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$co=mysql_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if

 

 

connect(«localhost»,

«root»,»»);//Подключаемся к серверу БД

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(!($co)) {echo «Íå

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

удалось подключиться к

серверу

БД!»;} //Если не вышло…

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

else { mysql_select_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

db($db); return $co; } // Åñëè âñå îê

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function get_author_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

info_by_aid($aid)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$sql=»select * from authors where aid=’$aid’»; //Составляем sql-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$aut=mysql_query($sql); //посылаем его

 

 

 

 

 

 

 

 

 

запрос

 

 

 

 

 

 

 

 

 

 

 

 

 

$auth=mysql_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

fetch_array($aut); //Помещаем ответ в ассоциативный массив

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

return $auth; //возвращаем

массив

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function showposts($category=’no’,$start=1,$howmuch=20)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$sql=»select * from posts»;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

îíà

if ($category!=’no’) {$sql.=» where

cid=’$category’»;} //Åñëè â

переменной

$category находится значение не по умолчанию,

 

 

 

 

 

 

 

 

 

 

определена программистом,

ê

 

 

ò.å.

 

 

 

 

 

 

 

 

 

составленному строчкой

âûøå

 

 

 

 

 

 

 

 

 

 

 

 

$sql.=» order by

timest desc limit

$start,$howmuch»; //

запросу присоединяется

новое условие

 

 

 

 

 

 

 

 

 

 

 

 

убывания поля timest

 

Это условие выборки

статей по howmuch, начиная со start в порядке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

запрос

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$re=mysql_query($sql); //отсылаем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

while ($res=mysql_fetch_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

array($re)) //цикл для прохода по всем возвращенным записям в БД

 

 

 

 

 

 

 

 

 

 

 

 

 

$author=get_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

author_info_by_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

aid($res[aid]); //получаем информацию об

авторе по его идентификатору

 

 

 

 

 

 

 

 

 

 

 

 

 

$head=substr($res[text],0,99);

//берем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

echo «Автор: <b>$author[fname]</b>

первые 100 знаков текста статьи

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Äàòà:

<b>$res[date]</b><br>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Время: <b>$res[time]</b><br>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$head<br>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<a href=’?do=read&pid=$res[pid]’>[more...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

}3

 

 

 

 

]</a><br>»; //Выводим

информацию о материале

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function showpost($pid)

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$sql=»select * from posts where pid=’$pid’»; //Запрос на

получение статьи pid

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$po=mysql_query($sql);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$post=mysql_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

fetch_array($po);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$author=get_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

author_info_by_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

echo

 

 

 

 

 

 

 

 

aid($post[aid]);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

«$post[text]<br><p align=rigth><b>$author[fname]

($author[email])<br>$post[date],

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

function showcomments($pid)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$post[time]</p>»; //Выводим статью

 

 

 

 

 

 

 

 

 

$sql=»select

 

* from

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

comments where pid=’$pid’ order by ‘timest’ desc»; //Запрос на получение

 

 

 

 

 

 

 

 

 

 

 

 

 

$co=mysql_

 

 

комментариев читателей к статье

 

 

 

 

 

 

 

 

 

 

 

 

 

query($sql);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

while($comm=mysql_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

fetch_array($co))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

echo

«$comm[comment]<br>$comm[aname]($comm[aemail])<br>$comm[date],$comm[time]<hr>»; //Выводим все

 

 

 

 

 

 

 

 

комментарии

 

 

 

 

 

 

 

 

 

 

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function addcommentform($pid)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

echo

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

«<form action=index.php method=post>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<input type=hidden name=pid value=’$pid’>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Èìÿ:

<input type=text name=aname><br>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

E-mail:

<input type=text name=aemail><br>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Комментарий: <textarea

name=comment></textarea><br>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<input

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

type=submit name=submit value=’Отправить’>»;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Выводим форму для добавления комментария к статье

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function

addcomment($aname,

$aemail,

$comment, $pid)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$date=date(«Y-m-

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Получаем сегодняшнюю дату

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d»);

(см. мануал по команде date)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$time=date(«H:i»); //Получаем время

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$timest=time(); //Время по unix-исчислению

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$sql=»insert into comments

values(null, ‘$pid’, ‘$aname’, ‘$aemail’, ‘$comment’,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

‘$time’,’$timest’)»; //Запрос

íà

 

 

 

 

‘$date’,

 

 

 

 

 

 

 

 

 

добавление

записи

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$a=mysql_query($sql);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function navigation()

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$sql=»select * from categories»;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$na=mysql_query($sql);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

while ($nav=mysql_query($sql))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

echo «<a href=’?do=view&cat=$nav[cid]’>$nav[category]</a> «;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#Admin interface’s functions are getting start

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function auth()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

echo «Authentification required!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<form action=admin.php method=post>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

login:

<input type=text name=login><br>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pass :

<input type=passwd name=passwd><br>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<input type=submit name=tr value=’login’>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

«;

 

 

форму

для аутентификации администратора

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//Выводим

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function athinfo($login)

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$sql=»select * from

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

authors where login=’$login’»; //Запрос на поиск

информации об администраторе с логином $login

 

 

 

 

 

 

 

 

 

 

 

$re=mysql_query($sql);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$result=mysql_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

return $result;

fetch_array($re);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function isadmin($login,$passwd)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$result=athinfo($login);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if ($result[password]==$passwd)

 

 

 

 

{ return true; } else { return false; }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function iseditor($pid, $cid)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$sql=»select * from categories where cid=’$cid’»;

//Запрос на получение информации о разделе $cid

 

 

 

 

 

 

 

 

 

 

 

 

 

$ac=mysql_query($sql);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$acc=mysql_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

fetch_array($ac);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$access=$acc[access];

//Здесь

перечислены через | редакторы раздела

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$accs=explode(«|»,$access); //режем

эту строчку

в массив по

символу |

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for ($i=0; $i<=count($accs); $i++)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//цикл по всем указанным

редакторам

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if($accs[$i]==$pid) { return

 

 

 

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

true; } //Åñëè

администратор

$aid указан в качестве редактора этого раздела

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

?>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

87

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

È Í Ò Å Ð Í Å Ò

(095) 928 - 6089, (095) 928 - 0360, (095) 928 - 3574

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

$ 69,99

Age

of Mythology

$ 22,99

Command & Conquer:

Generals

$ 55,99

The Elder

Scrolls III:

Morrowind:

Tribunal

$ 22,99

Anarchy

Online:

Notum Wars

 

 

 

 

 

 

 

 

 

$ 59,99

 

 

 

 

 

 

 

 

 

 

 

$ 72,95

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Earth

$ 59,99

 

 

 

 

$ 75,99

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

and

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Beyond

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

The Thing

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ 65,99

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sid Meier's

 

 

 

$ 79,99

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Vietcong

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Civilization III:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Play the

 

 

 

 

 

 

 

 

 

 

 

$ 89,99

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Airport 2002

World

 

$ 22,99

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Volume 1 Add-on

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MechWarrior 4:

ê Microsofr Flight

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Star Wars Galaxies:

 

Simulator 2002

 

 

 

 

 

 

 

 

Mercenaries

 

 

 

 

 

 

 

 

 

An Empire Divided

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ 89,99

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$ 59,99

 

 

 

 

 

 

 

 

$ 55,99

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dark Age of

Sim City 4

 

 

 

Camelot:

 

 

 

Shrouded Isles

 

 

 

 

 

 

 

 

 

$ 79,99

 

 

 

 

 

Neverwinter Nights:

The Sims

 

 

 

Shadows of Undrentide

 

 

 

Online

 

 

 

 

 

Ultima

 

Online: Age

$ 59,99

of Shadows

 

 

Asheron's

Call 2

$ 79,99 $ 79,99

 

 

 

 

Unreal II:

Diablo Battle Chest

The Awakening

 

 

 

 

 

$ 79,99

 

 

 

 

 

 

 

 

 

 

Zanzarah:

 

 

 

The

$

49,99

 

Hidden

 

 

 

Portal

 

 

Quake III:

 

 

 

 

 

 

 

 

Gold Edition

$ 35,99

$ 13,99

(GL) Футболка "Голубой Экран Смерти Windows" с логотипом "Хакер"

$ 90,99

(Blizzard) Warcraft III Baseball Cap

$ 9,99

Mouse Pad/ Коврик для мыши "Опасно для жизни"

Grand Theft

Star Wars Bounty

Auto: Vice Hunter - LI2055

City -

Soundtrack

Box Set

Final

ИНТЕРНЕТ-МАГАЗИН

ЗАКАЗЫ ПО ИНТЕРНЕТУ — КРУГЛОСУТОЧНО!

E-MAIL: sales@e-shop.ru

Fantasy XI:

Zippo(R)

Lighter

ЗАКАЗЫ ПО ТЕЛЕФОНУ МОЖНО СДЕЛАТЬ С 10.00 ДО 21.00 БЕЗ ВЫХОДНЫХ

$ 39,99

ТЕЛЕФОНЫ: 928-6089, 928-0360, 928-3574

$ 179,99

МЫ ПРИНИМАЕМ ЗАКАЗЫ НА ЛЮБЫЕ АМЕРИКАНСКИЕ ИГРЫ!

Соседние файлы в папке журнал хакер