Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование типизированного файла 
:(
    Опции темы
Z_P
Дата 17.4.2005, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 4.10.2003
Где: это я?

Репутация: нет
Всего: нет



Необходимо шифрование типизированного файла, пусть даже шифрование будет простенькое.
Подходит шифрование ксором (xor), но как его применить полностью к записи, а не по отдельным элементам этой записи? smile
PM MAIL   Вверх
RA
Дата 17.4.2005, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Прлостенький пример шифрования фалов но без оператора xor smile

Присоединённый файл ( Кол-во скачиваний: 54 )
Присоединённый файл  cfdg.rar
PM   Вверх
Z_P
Дата 17.4.2005, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 4.10.2003
Где: это я?

Репутация: нет
Всего: нет



Это полностью файл декодирует, и прибавляет символ определенный.
А мне нужно только запись из типизированного файла декодировать\раскодировать, как это сделать?
Как получить доступ к записи в общем, а не по ее элементам?

PM MAIL   Вверх
~FoX~
Дата 18.4.2005, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Z_P
В DRKB есть пример.


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
RA
Дата 18.4.2005, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Цитата(Z_P @ 17.4.2005, 23:20)
Это полностью файл декодирует, и прибавляет символ определенный.
А мне нужно только запись из типизированного файла декодировать\раскодировать, как это сделать?


Ну как написанно так это и понимается:
Цитата(Z_P @ 17.4.2005, 22:38)
Необходимо шифрование типизированного файла




Цитата(Z_P @ 17.4.2005, 23:20)
Как получить доступ к записи в общем, а не по ее элементам?


Должныже быть в твоём типизированном файле, указатели на запись, вот по ним и находится доступ к записи в целом.

К примеру могу предложить модуль для записи/чтения зашифрованных данных ini файла, как ни как типизированный фаил с указателями. smile

Это сообщение отредактировал(а) RAdmin - 18.4.2005, 10:58

Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  DataFile.rar
PM   Вверх
Snowy
Дата 18.4.2005, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Z_P @ 17.4.2005, 22:38)
Необходимо шифрование типизированного файла, пусть даже шифрование будет простенькое.

Самое простое, что тут можно сделать:
Создаешь TMemoryStream, загоняешь туда все записи, потом кодируешь весь поток побайтно и сбрасываешь в файл.
Обратный процесс: Читаешь в стрим, побайтно декодируешь и нарезаешь на записи.
PM MAIL   Вверх
Yanis
Дата 18.4.2005, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



К примеру, я делал так:
Код

type
  TRec = record
    f1: Integer;
    f2: String;
  end;
...

function CryptDecryptRec(const R: TRec): TRec;
var
  TR: TRec;
  i: integer;
const
  M = $666;
begin
  Result := TR;
  // каждое поле по отдельности:
  // сначала ксорим первое поле записи
  TR.f1 = R.f1 xor M;

  // затем второе поле
  for i := 1 to Length(R.f2)-1 do
    TR.f2[i] := Chr(Ord(R.f2[i]) xor M);
end;


а в программе, например:
Код

var
  R: TRec;
begin
...
  // при записи в файл
  R := CryptDecryptRec(R);
  write(f, R);

  // или при чтении
  read(f, R);
  R := CrypDecryptRec(R);


В общем, надеюсь идея ясна. Это самое простое шифрование, но в большинстве случаев вполне приемлимое для типизированых файлов. PS. Под рукой дельфов нету, так что не исключены ошибки smile


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Snowy
Дата 18.4.2005, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Я все сказал. В TMemoryStream можно зашифровать каждый байт, независимо от сложности струкруры.
Через move сохраняешь и восстанавливаешь структуру.
Стрим зашифровать элементарно
PM MAIL   Вверх
Romtek
Дата 18.4.2005, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 7.12.2004
Где: Холон

Репутация: нет
Всего: 4



Я навалял на Турбо Паскале такой код, по идее должен работать и в Дельфи.
Код
program xor_record;

type
  TRec = record
    f1, f2: Integer;
    f3: String;
  end;

  XX = array [1..SizeOf (TRec)] of byte;
  PX = ^XX;

var
  X: PX;
  Rec: TRec;
  Recsize,
  i: integer;

begin
  readln (Rec.f1);
  readln (Rec.f2);

  X := @Rec;
  Recsize := SizeOf (TRec);

  for i := 1 to Recsize do
   X^[i] := X^[i] xor lo (Recsize);

  readln;
end.

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

Это сообщение отредактировал(а) Romtek - 18.4.2005, 19:10
--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
Snowy
Дата 18.4.2005, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Это при простой записи, а при сложной Stream в руки и поехали шифровать.
стрим превращает структуру любой записи в поток байтов. Ксорим его или любой другой принцимп - по барабану. Гланое, что имеем дело не с полями, а с потоком данных.
PM MAIL   Вверх
Z_P
Дата 18.4.2005, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 4.10.2003
Где: это я?

Репутация: нет
Всего: нет



Всем большое спасибо за помощь!
С методом XOR я уже разобрался давно..
Пришел к тому как предлогает Yanis, но не очень ведь красиво, но в принципе пока такое решение только вижу.

А вообще я с самого начала хотел сделать как предлогает Snowy


Цитата(Snowy @ 18.4.2005, 19:11)
стрим превращает структуру любой записи в поток байтов. {...}  имеем дело c потоком данных. 


Вот только как такое реализовать? Примерчик можно не большой? Ведь с таким способом думаю и будет лучше шифрование?!


Кстати еще вопрос, ведь если два раза проксорить сначала к примеру с xor $15, потом еще xor $54, ведь шифрование лучше же?
PM MAIL   Вверх
Romtek
Дата 18.4.2005, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 7.12.2004
Где: Холон

Репутация: нет
Всего: 4



Цитата(Z_P @ 18.4.2005, 22:58)
ведь если два раза проксорить сначала к примеру с xor $15, потом еще xor $54, ведь шифрование лучше же?
ничего подобного, мелочи это. Одного xor хватит. Ты ведь не shareware программу пишешь?
--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
Z_P
Дата 19.4.2005, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 4.10.2003
Где: это я?

Репутация: нет
Всего: нет



Romtek
Нет конечно, free делаюsmile
PM MAIL   Вверх
Acraft
Дата 20.4.2005, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 19.4.2005

Репутация: нет
Всего: 2



Нда, послушать вас... операция XOR спасет от прочтения файла вашей бабушкой (если только она не была радисткой в годы бурной военной юности). smile
XOR - ЭТО ОПЕРАЦИЯ исключающего "или", иначе сложение по модулю 2. И является незначительной помехой для крипоанализa
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1 //таблица истинности
1 + 1 = 0

Вот самый простой пример. Шифрование заключается в сложении по модулю 26 символа открытого текста и символа ключа.
Если сообщение гласит: ONETIMEPAD.
а ключевая последовательноть: TBFRGFARFM
то шифртекст будет выглядеть так IPKLPSFHGQ
O + T mod 26 = I
N + B mod 26 = P
E + F mod 26 = K и т.д. a + b mod n;
Родственник xor, т.к. в качестве n используется длинна алфавита используемого в сообщении.
Недостатком является то, что длина ключа должна совпадать с длиной
шифруемого сообщения (и в идеале, алгоритм носит название "Одноразового блокнота", ключ также должен быть одноразовым).

Идем дальше.
Шифрование: поточное (преобразует открытый текст в шифротекст побитово)
и блочное (вся шифруемая информация разбивается на блоки по 64, 128...бит.
А дальше идут управляемые операции над блоками)

DES - устаревший, но отличный учебный пример. 64 битовый блочный алгоритм.
Предназначен для шифрования данных 64 битовыми блоками. Алгоритм симметричен,
т.е. для расшифрования его надо прогнать наоборот.

Длина ключа - 56 бит (любое 56 битовое число). Секретность целиком определяется ключом.
На простейшем уровне алгоритм представляет собой комбинацию рассеивания и перемешивания.
Блок шифрования здесь назовем раундом. DES включает 16 раундов, т.е. одна и та же комбинация
методов применяется к открытому тексту 16 раз.

открытый текст (64 бита)
| |
Left [0](32 бита) Rigth [0](32 бита)
| |
xor<------(f)---------|
| ^ |
\ |---------/---------- K[1] - ключ
\ /
\ /
X
/ \
/ \ //блоки меняются местами
| |
V V
L[1]=R[0] R[1]=L[0] xor f(R[0],K[1])
| |
xor<------(f)-----|
| ^ |
\ |------/---------- K[2] - ключ
\ /
\ /
X
/ \
/ \ //блоки меняются местами
| |
V V
L[2]=R[1] R[2]=L[1] xor f(R[1],K[2])
| |
...................
...................
.....................................
| |
v v
L[15]=R[14] R[15]=L[14] xor f(R[14],K[15])
| |
xor<------(f)----------------|
| ^ |
| |--------------------------------- K[16] - ключ
| |
v v //на последнем шаге перестановка не осуществляется
R15=L14 xor f(R14,K15) R[16]=R[15]
|__________________|
|
шифртекст (64 бита)

{Алгоритм DES}

Блок разбивается на левую и правую половину по 32 бита.
Затем выполняется 16 раундов одинаковых действий, в которых
данные объединяются с ключом (ф-я (f)). После 16-го раунда
левая и правая половины объединяются.

На каждом раунде биты ключа сдвигаются, а затем из 56 битов
ключа выбираются 48 битов. Правая половина данных увеличиватся
до 48 битов путем перестановки с расширением, XOR'ится
с 48 битами смещенного и переставленного ключа, проходит через
8 S-блоков, образуя 32 новых бита, и переставляется снова.
Эти четыре операции и выполняются функцией f.
Затем результат выполнения ф-ии f складывается с левой половиной
с помощью еще одной операции XOR. В итоге этих действий
появляется новая правая половина, а старая правая половина
становится новой левой. Эти действия повторяются 16 раз,
образуя 16 раундов алгоритма ДЕС.
Если принять за B[i] результат i-й операции, L[i] и R[i] - левую
и правую половины B[i]'го, K[i] - 48 битовый ключ для раунда i,
а f - функцию, выполняющую все подстановки, перестановки и оперции
XOR с ключом, то раунд можно записать так:

L[i]=R[i-1]
R[i]=L[i-1] xor f(R[i-1], K[i])


{один раунд - нутро ф-ии (f)}

L[i-1] R[i-1] К Л Ю Ч
| | | |
| | V V
| --------| сдвиг сдвиг
| | | ---------| |---------
| | v | v v |
| | расширяющая | сжимающая |
| | перестановка | перестановка |
\ / | | | |
\ / v | | |
\ / XOR<---------------------------| |
\/ | | |
/\ v | |
/ \ подстановка | |
/ \ в S-блоке | |
/ \ | | |
| \ v | |
| \ перестановка | |
| \ в P-блоке | |
| \ | | |
| \ v | |
| \-> XOR |___ ___|
| | | |
v v v v
L[i] R[i] К Л Ю Ч


Осталось расписать операции перестановок и S-блоков в f,
но это потом, сейчас СПАТЬ!

Кто заинтересуется, можете почитать- книга всех времен и народов:
* Б. Шнайер. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на
языке Си. – М.: Изд. ТРИУМФ, 2002 – 816 с.: ил.
Вот еще неплохая книжечка, но форма изложения тяжеловата.
* Молдовян А.А. и др., Криптография: скоростные шифры. – СПб.: БХВ-Петербург,
2002. – 496 с.: ил.
(из той же серии, книга дополняет предыдущую - "Криптография, от примитивов к синтезу")
Здесь все про скоростные шифры.

Добавлено @ 02:10
p.s.
нда, псевдогафика тут не получилась, ну ладно, кому надо могу на мыло txt-шку сбросить.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1387 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.