![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Z_P |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 4.10.2003 Где: это я? Репутация: нет Всего: нет |
Необходимо шифрование типизированного файла, пусть даже шифрование будет простенькое.
Подходит шифрование ксором (xor), но как его применить полностью к записи, а не по отдельным элементам этой записи? ![]() |
|||
|
||||
RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
Прлостенький пример шифрования фалов но без оператора xor
![]() Присоединённый файл ( Кол-во скачиваний: 54 ) ![]() |
|||
|
||||
Z_P |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 4.10.2003 Где: это я? Репутация: нет Всего: нет |
Это полностью файл декодирует, и прибавляет символ определенный.
А мне нужно только запись из типизированного файла декодировать\раскодировать, как это сделать? Как получить доступ к записи в общем, а не по ее элементам? |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 13 Всего: 68 |
Z_P
В DRKB есть пример. |
|||
|
||||
RA |
|
||||||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
Ну как написанно так это и понимается:
Должныже быть в твоём типизированном файле, указатели на запись, вот по ним и находится доступ к записи в целом. К примеру могу предложить модуль для записи/чтения зашифрованных данных ini файла, как ни как типизированный фаил с указателями. ![]() Это сообщение отредактировал(а) RAdmin - 18.4.2005, 10:58 Присоединённый файл ( Кол-во скачиваний: 30 ) ![]() |
||||||
|
|||||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Самое простое, что тут можно сделать: Создаешь TMemoryStream, загоняешь туда все записи, потом кодируешь весь поток побайтно и сбрасываешь в файл. Обратный процесс: Читаешь в стрим, побайтно декодируешь и нарезаешь на записи. |
|||
|
||||
Yanis |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
К примеру, я делал так:
а в программе, например:
В общем, надеюсь идея ясна. Это самое простое шифрование, но в большинстве случаев вполне приемлимое для типизированых файлов. PS. Под рукой дельфов нету, так что не исключены ошибки ![]() |
||||
|
|||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Я все сказал. В TMemoryStream можно зашифровать каждый байт, независимо от сложности струкруры.
Через move сохраняешь и восстанавливаешь структуру. Стрим зашифровать элементарно |
|||
|
||||
Romtek |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 7.12.2004 Где: Холон Репутация: нет Всего: 4 |
Я навалял на Турбо Паскале такой код, по идее должен работать и в Дельфи.
При этом данные не надо никуда копировать, они шифруются прямо на месте, в записи. Ключом шифра я выбрал размер записи, хотя можно взять любой другой. Это сообщение отредактировал(а) Romtek - 18.4.2005, 19:10 --------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр. |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Это при простой записи, а при сложной Stream в руки и поехали шифровать.
стрим превращает структуру любой записи в поток байтов. Ксорим его или любой другой принцимп - по барабану. Гланое, что имеем дело не с полями, а с потоком данных. |
|||
|
||||
Z_P |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 4.10.2003 Где: это я? Репутация: нет Всего: нет |
Всем большое спасибо за помощь!
С методом XOR я уже разобрался давно.. Пришел к тому как предлогает Yanis, но не очень ведь красиво, но в принципе пока такое решение только вижу. А вообще я с самого начала хотел сделать как предлогает Snowy
Вот только как такое реализовать? Примерчик можно не большой? Ведь с таким способом думаю и будет лучше шифрование?! Кстати еще вопрос, ведь если два раза проксорить сначала к примеру с xor $15, потом еще xor $54, ведь шифрование лучше же? |
|||
|
||||
Romtek |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 7.12.2004 Где: Холон Репутация: нет Всего: 4 |
--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр. |
|||
|
||||
Z_P |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 4.10.2003 Где: это я? Репутация: нет Всего: нет |
Romtek
Нет конечно, free делаю ![]() |
|||
|
||||
Acraft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 19.4.2005 Репутация: нет Всего: 2 |
Нда, послушать вас... операция XOR спасет от прочтения файла вашей бабушкой (если только она не была радисткой в годы бурной военной юности).
![]() 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-шку сбросить. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |