Кодирование (вокруг да около)
+2
tux
Myster
Участников: 6
Страница 1 из 1
Кодирование (вокруг да около)
Подскажите плиз, можно ли в фб как-то перемножать "словестные" выражения? То бишь как строки. Что-то похожее на примитивное кодирование
Например, слово "freebasic" умножить на что-нибудь также словестное или числовое, чтобы получилась какая-нибудь бяка типа "%H#HT" и тд и тп, и все это добро будет записано в файле. А потом в обратном порядке я это "раскодировал" себе в программу
Мне это для того, чтобы можно было хоть скрыть данные по тем же уровням в игре, чтобы пользователь не редактировал (на крайний случай чтобы всех "кишок" программы не было видно)).. Но если есть другие способы, тоже не отказался бы о них услышать
Например, слово "freebasic" умножить на что-нибудь также словестное или числовое, чтобы получилась какая-нибудь бяка типа "%H#HT" и тд и тп, и все это добро будет записано в файле. А потом в обратном порядке я это "раскодировал" себе в программу
Мне это для того, чтобы можно было хоть скрыть данные по тем же уровням в игре, чтобы пользователь не редактировал (на крайний случай чтобы всех "кишок" программы не было видно)).. Но если есть другие способы, тоже не отказался бы о них услышать
Re: Кодирование (вокруг да около)
Обычно "кишки" (те скрипты, текстурки и пр) пакуют в архивы, мало кто из обычных юзверей догадывается его разколупать (темболее если не использовать стандартные архиваторы, а допустим просто слепить все в один большой файл и создать таблицу с адресами, по которой можно восстановить их), на крайнять мона сделать запароленый архив, а на счет каких либо сохраненок мона воспользоваться каким либо готовым алгоритмом шифрования, коих и инете допупа
Re: Кодирование (вокруг да около)
Собственно стринги - нельзя. Но ведь у каждой буквы есть уникальный код - переводишь строки в массивы integer (функция asc), их перемножаешь и делишь так, что бы попасть в диапазон 1-255. Потом результирующий массив выводишь как строку (функция chr$ + конкатенация символов в строку). Должно получиться именно то, что ты ожидаешь.
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: Кодирование (вокруг да около)
Кстати, лучше не перемножать, а делать XOR - результат получается запутанней и неочевидней. Или для формирования множителя использовать rnd() (конечно, без предварительного случайного входа в таблицу псевдослучайностей - а то и сам не расшифруешь ) Хотя если множить нечётную строку на чётную, то тоже довольно криптостойко должно получаться - ведь в этом случае ключ непостоянен, а зависит от контекста. Хотя разработка алгоритма расшифровки в таком случае будет задачей далеко не тривиальной...
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: Кодирование (вокруг да около)
А что бы небыло видно "кишок", упакуй код программой PKLite - в коммерческой версии она использует очень серьёзный алгоритм шифрования и имеет ключ для запрета распаковки. Но! PKLite пакует только файлы .com и .exe - если у тебя есть файлы данных, то их таки придётся таки самому шифровать (хотя, возможно, если их переименовать в .exe и пакануть пклайтом то может чё путное и выйдет... но и то только если весь файл данных надо целиком грузить в память).Myster пишет:чтобы всех "кишок" программы не было видно)).. Но если есть другие способы, тоже не отказался бы о них услышать
justar- Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 49
Откуда : Кишинёв, Республика Молдоа
Re: Кодирование (вокруг да около)
Спасибо за ответы) Я пожалуй узнал больше чем ожидал)) Значит буду пользоваться какой-нибудь программкой (хотя не знаю, будут ли они совместимы с фб или это воообще никак не зависит? ), ну или же через chr, я тоже о них подумывал
Re: Кодирование (вокруг да около)
Упаковщиков программ очень много. Они пакуют именно программу, а какой компилятор её сделал, ей пофигу.
Некоторые даже пакуют по несколько раз.
А я вот хотел спросить, раз уж разговор зашел. Если я беру два числа и соеденяю их оператором xor, то как мне его обратно разобрать?
вот например у меня
И как мне теперь из c зная k получить d?
Некоторые даже пакуют по несколько раз.
А я вот хотел спросить, раз уж разговор зашел. Если я беру два числа и соеденяю их оператором xor, то как мне его обратно разобрать?
вот например у меня
- Код:
dim as byte d ' данные
dim as byte k ' ключ
' кодируем
c = d xor k
И как мне теперь из c зная k получить d?
Re: Кодирование (вокруг да около)
Вся прелесть XOR и заключается в том, что:
x = a xor b
a = x xor b
То есть что бы получить обратный результат нужно применить опять XOR:
Вот таблица 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/
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/
Re: Кодирование (вокруг да около)
А вот я не уверен, что это правильный вариант.
Для шифрации данных в файле или потоке, то верно
а вот скрыть данные в готовом exe, то даже и не знаю. Изначально инфу нужо будет туда вбивать в кодированном виде, и где-то расшифровывать.
Кстати, вот тут вопросик, он больше по архитектуре exe и тому как его делает fb.
Помню было однажды высказано следующее предложение.
Если в исходнике записать строку не в виде символов
"hello"
А числами
chr(104) & chr(101) & chr(108) & chr(108) & chr(111)
то фиг кто прочитает в exe.
Кто-нибудь проверял, пробовал может это действительно затруднит взлом?
Хотя шифрование усложнит задачку.
Для шифрации данных в файле или потоке, то верно
а вот скрыть данные в готовом exe, то даже и не знаю. Изначально инфу нужо будет туда вбивать в кодированном виде, и где-то расшифровывать.
Кстати, вот тут вопросик, он больше по архитектуре exe и тому как его делает fb.
Помню было однажды высказано следующее предложение.
Если в исходнике записать строку не в виде символов
"hello"
А числами
chr(104) & chr(101) & chr(108) & chr(108) & chr(111)
то фиг кто прочитает в exe.
Кто-нибудь проверял, пробовал может это действительно затруднит взлом?
Хотя шифрование усложнит задачку.
Re: Кодирование (вокруг да около)
Хз, врятли, я думаю компилятор додумается преобразовать ето в обычную строку (типа оптимизация).Если в исходнике записать строку не в виде символов
"hello"
А числами
chr(104) & chr(101) & chr(108) & chr(108) & chr(111)
то фиг кто прочитает в exe.
А сообще могеш глянуть шо получится в ассемблерном файле после трансляции
Re: Кодирование (вокруг да около)
А вот я не уверен, что это правильный вариант.
Для шифрации данных в файле или потоке, то верно
а вот скрыть данные в готовом exe, то даже и не знаю. Изначально инфу нужо будет туда вбивать в кодированном виде, и где-то расшифровывать.
Eric-S, я и не пытался дать ответ на вопрос о сокрытии данных в .exe. Я ответил на вопрос о операторе XOR.
И вообще насколько я понимаю, то Myster спрашивал о сокрытии данных в обычных файлах хранящие разные данные (тест, карты уровне и др.).
Спасибо!!!
Кодирование (вокруг да около)
привет. предлагаю свой метод кодирования по таблице. как это так? мы знаем, что восьмибитный символ, может содержать максимально 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 ьбайтного массива. соответственно получалось жутко долго, пока для каждой буквы подбереш ее аналог в другой кодировке.
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
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Кодирование (вокруг да около)
Электрик, метод твой относительно удобен.
Можно предложить немного другой вариант, например, не таблицу а строку.
Где смещение символа соответствует его номеру, а какой там символ уже не важно. Да это и без разницы, в памяте это будет одинаково выглядеть.
Но, тут есть две оговорки. Принцип-то неплох, не важно таблица это или строка.
проблемы следующие:
перекодировки например из cp866 в cp1251, всё нормально, а попробуй добавить ещё одну кодировку, например koy или mac!
Нужно либо создавать кучу трансляционных таблиц, для каждой пары, что естественно не в стиле программистов. Это подход бландинок.
Либо переводить в одну определённую, а значит уже нужны таблицы соответствия только для юникода.
Но сами понимаете, в результате будет двойная перекодировка.
Конечно можно оптимизировать, создав на лету временную таблицу.
Но это уже не в эту тему.
Теперь, о шифрации, использование xor даст примерно такойже эфект, причём работать будет гораздо быстрее.
Но по любому, шифрация в лоб, с повторяющемся ключом, никуда не годиться, её взломают очень быстро.
Для надёжности, ключ можно взять большой или очень большой.
Или шифровать текст, с помощью него самого.
Например если у нас ключ, 16 значный, то мы с помощью него шифруем первые 16 символов, а следующие 16 символов шифруем с помощью первых незашифрованных 16 символов.
Наверное путано объяснил, попробую ещё раз.
Весь текст разбиваем на блоки по 16 символов.
первый блок шифруем с помощьу ключа и результат сохраняем в файл.
а ключ перезаписываем первым блоком.
После чего идём дальше.
Можно извратиться дальше и перепутать блоки местами.
Или пойти по вообще другому пути - математическому. Как я понимаю, настоящие алгоритмы шифрования именно на математической основе и работают.
Какие принципы беруться за основу, понятия не имею, но можно например взять квадратное уравнение:
a*x^2 + b*x - c = 0
Если помните, то у этого уравнения могут быть два корня. А чем выше степень, тем корней больше и тем сложнее их найти.
Так, вот, мы можем брать это уравнение за основу и подставлять данные в него.
В файл будут сохраняться a, b и c подобранные для двух корней.
Корнями же x1 будет символ ключа, а x2 кодируемый символ.
Весело? А если будем брать уравнение не 12-ой степени, а 22-ой?
Правда, я вижу здесь другой минус, результат будет намного больше входного текста.
Но это уже не так страшно, можно по комбинировать.
Э! Я куда-то далеко ушел от темы. Ну да ладно.
Можно предложить немного другой вариант, например, не таблицу а строку.
Где смещение символа соответствует его номеру, а какой там символ уже не важно. Да это и без разницы, в памяте это будет одинаково выглядеть.
Но, тут есть две оговорки. Принцип-то неплох, не важно таблица это или строка.
проблемы следующие:
перекодировки например из cp866 в cp1251, всё нормально, а попробуй добавить ещё одну кодировку, например koy или mac!
Нужно либо создавать кучу трансляционных таблиц, для каждой пары, что естественно не в стиле программистов. Это подход бландинок.
Либо переводить в одну определённую, а значит уже нужны таблицы соответствия только для юникода.
Но сами понимаете, в результате будет двойная перекодировка.
Конечно можно оптимизировать, создав на лету временную таблицу.
Но это уже не в эту тему.
Теперь, о шифрации, использование xor даст примерно такойже эфект, причём работать будет гораздо быстрее.
Но по любому, шифрация в лоб, с повторяющемся ключом, никуда не годиться, её взломают очень быстро.
Для надёжности, ключ можно взять большой или очень большой.
Или шифровать текст, с помощью него самого.
Например если у нас ключ, 16 значный, то мы с помощью него шифруем первые 16 символов, а следующие 16 символов шифруем с помощью первых незашифрованных 16 символов.
Наверное путано объяснил, попробую ещё раз.
Весь текст разбиваем на блоки по 16 символов.
первый блок шифруем с помощьу ключа и результат сохраняем в файл.
а ключ перезаписываем первым блоком.
После чего идём дальше.
Можно извратиться дальше и перепутать блоки местами.
Или пойти по вообще другому пути - математическому. Как я понимаю, настоящие алгоритмы шифрования именно на математической основе и работают.
Какие принципы беруться за основу, понятия не имею, но можно например взять квадратное уравнение:
a*x^2 + b*x - c = 0
Если помните, то у этого уравнения могут быть два корня. А чем выше степень, тем корней больше и тем сложнее их найти.
Так, вот, мы можем брать это уравнение за основу и подставлять данные в него.
В файл будут сохраняться a, b и c подобранные для двух корней.
Корнями же x1 будет символ ключа, а x2 кодируемый символ.
Весело? А если будем брать уравнение не 12-ой степени, а 22-ой?
Правда, я вижу здесь другой минус, результат будет намного больше входного текста.
Но это уже не так страшно, можно по комбинировать.
Э! Я куда-то далеко ушел от темы. Ну да ладно.
Re: Кодирование (вокруг да около)
Наткнулся сейчас на это
http://technomag.edu.ru/doc/56755.html
Програмку где скачать не знаю, но всё размазано так, что написать её не трудно.
А вообще, имхо, халтура, можно шифрануть ещё круче.
Для тех кто уже прочитал, вот мои комменты.
Сам пароль и ключь не очень засекречены, в смысле прятать их надо глубже.
Да и ключь, неизменен, для всего текста.
Но с другой стороны, задача была не крутой шифратор, а демонстрация методов шифрования.
http://technomag.edu.ru/doc/56755.html
Програмку где скачать не знаю, но всё размазано так, что написать её не трудно.
А вообще, имхо, халтура, можно шифрануть ещё круче.
Для тех кто уже прочитал, вот мои комменты.
Сам пароль и ключь не очень засекречены, в смысле прятать их надо глубже.
Да и ключь, неизменен, для всего текста.
Но с другой стороны, задача была не крутой шифратор, а демонстрация методов шифрования.
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|