FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Кодирование (вокруг да около)

+2
tux
Myster
Участников: 6

Перейти вниз

Кодирование (вокруг да около) Empty Кодирование (вокруг да около)

Сообщение  Myster Пт Сен 19, 2008 12:35 pm

Подскажите плиз, можно ли в фб как-то перемножать "словестные" выражения? То бишь как строки. Что-то похожее на примитивное кодирование Smile
Например, слово "freebasic" умножить на что-нибудь также словестное или числовое, чтобы получилась какая-нибудь бяка типа "%H#HT" и тд и тп, и все это добро будет записано в файле. А потом в обратном порядке я это "раскодировал" себе в программу Rolling Eyes
Мне это для того, чтобы можно было хоть скрыть данные по тем же уровням в игре, чтобы пользователь не редактировал (на крайний случай чтобы всех "кишок" программы не было видно)).. Но если есть другие способы, тоже не отказался бы о них услышать Very Happy
Myster
Myster

Сообщения : 29
Дата регистрации : 2008-08-21
Возраст : 35
Откуда : Мытищи МО

http://www.wind-team.com

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  tux Пт Сен 19, 2008 1:31 pm

Обычно "кишки" (те скрипты, текстурки и пр) пакуют в архивы, мало кто из обычных юзверей догадывается его разколупать (темболее если не использовать стандартные архиваторы, а допустим просто слепить все в один большой файл и создать таблицу с адресами, по которой можно восстановить их), на крайнять мона сделать запароленый архив, а на счет каких либо сохраненок мона воспользоваться каким либо готовым алгоритмом шифрования, коих и инете допупа
tux
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 36
Откуда : Сибирь

http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  justar Пт Сен 19, 2008 1:32 pm

Собственно стринги - нельзя. Но ведь у каждой буквы есть уникальный код - переводишь строки в массивы integer (функция asc), их перемножаешь и делишь так, что бы попасть в диапазон 1-255. Потом результирующий массив выводишь как строку (функция chr$ + конкатенация символов в строку). Должно получиться именно то, что ты ожидаешь.

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  justar Пт Сен 19, 2008 1:36 pm

Кстати, лучше не перемножать, а делать XOR - результат получается запутанней и неочевидней. Или для формирования множителя использовать rnd() (конечно, без предварительного случайного входа в таблицу псевдослучайностей - а то и сам не расшифруешь Wink ) Хотя если множить нечётную строку на чётную, то тоже довольно криптостойко должно получаться - ведь в этом случае ключ непостоянен, а зависит от контекста. Хотя разработка алгоритма расшифровки в таком случае будет задачей далеко не тривиальной...

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  justar Пт Сен 19, 2008 1:42 pm

Myster пишет:чтобы всех "кишок" программы не было видно)).. Но если есть другие способы, тоже не отказался бы о них услышать Very Happy
А что бы небыло видно "кишок", упакуй код программой PKLite - в коммерческой версии она использует очень серьёзный алгоритм шифрования и имеет ключ для запрета распаковки. Но! PKLite пакует только файлы .com и .exe - если у тебя есть файлы данных, то их таки придётся таки самому шифровать (хотя, возможно, если их переименовать в .exe и пакануть пклайтом то может чё путное и выйдет... но и то только если весь файл данных надо целиком грузить в память).

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  Myster Пт Сен 19, 2008 9:44 pm

Спасибо за ответы) Я пожалуй узнал больше чем ожидал)) Значит буду пользоваться какой-нибудь программкой (хотя не знаю, будут ли они совместимы с фб или это воообще никак не зависит? Rolling Eyes), ну или же через chr, я тоже о них подумывал Smile
Myster
Myster

Сообщения : 29
Дата регистрации : 2008-08-21
Возраст : 35
Откуда : Мытищи МО

http://www.wind-team.com

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  Eric-S Пт Сен 19, 2008 11:13 pm

Упаковщиков программ очень много. Они пакуют именно программу, а какой компилятор её сделал, ей пофигу.
Некоторые даже пакуют по несколько раз.

А я вот хотел спросить, раз уж разговор зашел. Если я беру два числа и соеденяю их оператором xor, то как мне его обратно разобрать?

вот например у меня
Код:

dim as byte d ' данные
dim as byte k ' ключ

' кодируем
c = d xor k

И как мне теперь из c зная k получить d?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  ShenZN Сб Сен 20, 2008 1:05 pm

Вся прелесть XOR и заключается в том, что:

x = a xor b
a = x xor b

То есть что бы получить обратный результат нужно применить опять XOR:

Код:
dim as byte d = 23 ' данные
dim as byte k = 56' ключ
dim as byte c = 0

' кодируем
c = d xor k
d=0 ' для уверености :-)
d = c xor k
print d 
sleep


Вот таблица XOR:
x y z
1 1 0
1 0 1
0 1 1
0 0 0

То есть простыми словами при сравнении на выходе XOR получается TRUE лиш когда x и y разные.
XOR славится в элегантном решении некоторых задач: обмен значений переменных, простое шифрование и т.д.

http://www.codenet.ru/progr/alg/Swap-Variables.php

http://axofiber.no-ip.org/inside/xor.ciphering.htm


Myster, посмотри еще это:

http://freebasic.net/forum/viewtopic.php?t=11560&sid=a9861b2c2009f781514c4ef858c21dbc

http://code.google.com/p/fbpacker/

ShenZN

Сообщения : 155
Дата регистрации : 2008-02-18
Откуда : Ukraine

http://lodestar-game.narod.ru

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  Myster Пт Сен 26, 2008 5:05 pm

ShenZN, благодарю, это, пожалуй, то, что нужно Smile
Myster
Myster

Сообщения : 29
Дата регистрации : 2008-08-21
Возраст : 35
Откуда : Мытищи МО

http://www.wind-team.com

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  Eric-S Пт Сен 26, 2008 7:41 pm

А вот я не уверен, что это правильный вариант.
Для шифрации данных в файле или потоке, то верно
а вот скрыть данные в готовом exe, то даже и не знаю. Изначально инфу нужо будет туда вбивать в кодированном виде, и где-то расшифровывать.

Кстати, вот тут вопросик, он больше по архитектуре exe и тому как его делает fb.

Помню было однажды высказано следующее предложение.
Если в исходнике записать строку не в виде символов
"hello"
А числами
chr(104) & chr(101) & chr(108) & chr(108) & chr(111)
то фиг кто прочитает в exe.

Кто-нибудь проверял, пробовал может это действительно затруднит взлом?
Хотя шифрование усложнит задачку.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  tux Пт Сен 26, 2008 8:01 pm

Если в исходнике записать строку не в виде символов
"hello"
А числами
chr(104) & chr(101) & chr(108) & chr(108) & chr(111)
то фиг кто прочитает в exe.
Хз, врятли, я думаю компилятор додумается преобразовать ето в обычную строку (типа оптимизация).
А сообще могеш глянуть шо получится в ассемблерном файле после трансляции
tux
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 36
Откуда : Сибирь

http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  ShenZN Сб Сен 27, 2008 7:01 am

А вот я не уверен, что это правильный вариант.
Для шифрации данных в файле или потоке, то верно
а вот скрыть данные в готовом exe, то даже и не знаю. Изначально инфу нужо будет туда вбивать в кодированном виде, и где-то расшифровывать.

Eric-S, я и не пытался дать ответ на вопрос о сокрытии данных в .exe. Я ответил на вопрос о операторе XOR.
И вообще насколько я понимаю, то Myster спрашивал о сокрытии данных в обычных файлах хранящие разные данные (тест, карты уровне и др.).

Спасибо!!!
Very Happy Very Happy Very Happy

ShenZN

Сообщения : 155
Дата регистрации : 2008-02-18
Откуда : Ukraine

http://lodestar-game.narod.ru

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Кодирование (вокруг да около)

Сообщение  electrik Сб Сен 27, 2008 6:25 pm

привет. предлагаю свой метод кодирования по таблице. как это так? мы знаем, что восьмибитный символ, может содержать максимально 256 значений от 0 до 255. соответственно, можно создать массив из 256 элементов, каждый из которых будет содержать в себе значения от 0 до 255. а теперь, возьмем, например, английскую букву h- значение ее 104, и поменяем местами с восклицательным знаком- его значение 33. так можно поменять большинство букв, например со знаками препинания, математическими знаками или цифрами. вытоге человек будет видеть набор типа:
134+765(15621(87)/=\-0\.
загрузил? ну а теперь пример, как это реально работает. конечно хакер сломает за 20 сек, а простой юзер)(геймер) будет удивляться, как тут в этих цифрах-знаках все лежит.
код:
'кодируем фразу "hello world"
dim table(255) as ubyte 'создадим массив из 256 элементов
dim i as uinteger 'переменная счетчик
dim text as zstring * 12 'оригинальный текст
dim codedtext as zstring * 12 'закодированный текст
dim decodedtext as zstring * 12 'раскодированный текст

'забьем наш 256 байтный массив, значениями от 0 до 255
for i=0 to 255
table(i)=i
next i

'переставим местами все буквы содержащиеся во фразе "hello world" на математические знаки
table(43)=104 'h+
table(104)=43 '+h
table(45)=101 'e-
table(101)=45 '-e
table(42)=108 'l*
table(108)=42 '*l
table(47)=111 'o/
table(111)=47 '/o
table(60)=119 'w<
table(119)=60 '<w
table(62)=114 'r>
table(114)=62 '>r
table(61)=100 'd=
table(100)=61 '=d
table(32)=92 'space\
table(92)=32 '\space

text="hello world" 'любимая всеми фраза. оригинальный текст
print "original text =";,text 'выводим оригинальный текст

'начинаем кодирование
for i=0 to 10 'цикл, кодируем по символу по длине строки
codedtext[i]=table(text[i]) 'меняем по таблице значение буквы на знак.
'коротко не объясню, расскажу длиннее.
первая буква h, ее значение 104, вот мы и меняем букву на знак по адресу в таблице 104, а у нас там лежит значение знака +- значение 43. ну и так далее.
next
print "coded text =";,codedtext 'печатаем закодированный текст

'раскодируем текст
for i=0 to 10
decodedtext[i]=table(codedtext[i]) 'меняем по таблице значение знака на букву
next
print "decoded text =";,decodedtext
sleep

вот так. в принципе, можно подготовить таблицу, а потом ее пользовать. в каждой игрушке, для сообщений можно делать разную кодировку, так что таблица от одной игры не подойдет к другой. да и вообще при помощи таблиц, можно сделать мощный перекодировщик из кодировок win в dos и т.д. пользуйтесь средствами FreeBasic, которые я показал, просто многие при перекодировке текста, в старых бейсиках использовали перебор всего 256 ьбайтного массива. соответственно получалось жутко долго, пока для каждой буквы подбереш ее аналог в другой кодировке.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  Eric-S Пн Сен 29, 2008 1:44 am

Электрик, метод твой относительно удобен.
Можно предложить немного другой вариант, например, не таблицу а строку.
Где смещение символа соответствует его номеру, а какой там символ уже не важно. Да это и без разницы, в памяте это будет одинаково выглядеть.

Но, тут есть две оговорки. Принцип-то неплох, не важно таблица это или строка.
проблемы следующие:

перекодировки например из cp866 в cp1251, всё нормально, а попробуй добавить ещё одну кодировку, например koy или mac!
Нужно либо создавать кучу трансляционных таблиц, для каждой пары, что естественно не в стиле программистов. Это подход бландинок.
Либо переводить в одну определённую, а значит уже нужны таблицы соответствия только для юникода.
Но сами понимаете, в результате будет двойная перекодировка.
Конечно можно оптимизировать, создав на лету временную таблицу.
Но это уже не в эту тему.


Теперь, о шифрации, использование xor даст примерно такойже эфект, причём работать будет гораздо быстрее.
Но по любому, шифрация в лоб, с повторяющемся ключом, никуда не годиться, её взломают очень быстро.


Для надёжности, ключ можно взять большой или очень большой.
Или шифровать текст, с помощью него самого.

Например если у нас ключ, 16 значный, то мы с помощью него шифруем первые 16 символов, а следующие 16 символов шифруем с помощью первых незашифрованных 16 символов.
Наверное путано объяснил, попробую ещё раз.


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

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

Или пойти по вообще другому пути - математическому. Как я понимаю, настоящие алгоритмы шифрования именно на математической основе и работают.
Какие принципы беруться за основу, понятия не имею, но можно например взять квадратное уравнение:
a*x^2 + b*x - c = 0

Если помните, то у этого уравнения могут быть два корня. А чем выше степень, тем корней больше и тем сложнее их найти.
Так, вот, мы можем брать это уравнение за основу и подставлять данные в него.
В файл будут сохраняться a, b и c подобранные для двух корней.
Корнями же x1 будет символ ключа, а x2 кодируемый символ.
Весело? А если будем брать уравнение не 12-ой степени, а 22-ой?
Правда, я вижу здесь другой минус, результат будет намного больше входного текста.
Но это уже не так страшно, можно по комбинировать.

Э! Я куда-то далеко ушел от темы. Ну да ладно.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

Кодирование (вокруг да около) Empty Re: Кодирование (вокруг да около)

Сообщение  Eric-S Пн Сен 29, 2008 7:59 am

Наткнулся сейчас на это
http://technomag.edu.ru/doc/56755.html

Програмку где скачать не знаю, но всё размазано так, что написать её не трудно.

А вообще, имхо, халтура, можно шифрануть ещё круче.

Для тех кто уже прочитал, вот мои комменты.

Сам пароль и ключь не очень засекречены, в смысле прятать их надо глубже.

Да и ключь, неизменен, для всего текста.

Но с другой стороны, задача была не крутой шифратор, а демонстрация методов шифрования.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 40
Откуда : Россия, Санкт-Петербург

http://eric50.narod.ru

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения