Ten artykuł został stworzony dla starszych wersji GameMakera i może nie być aktualny.

Szyfrowanie danych

Sobota, 11 Czerwca 2005, 19:07
Czas czytania 1 minuta, 42 sekundy
Zgodne z GM: gm5 gm6 gm7 gm8
Gdy potrzebujesz zaszyfrować dane aby np. zapisać je do pliku, tak aby użytkownik nie mógł ich odczytać - przeczytaj ten artykuł.
Na początku tworzymy nową grę.
Robimy pierwszy skrypt, i nazywamy go zaszyfruj.
Wpisujemy w nim:
kodtext=argument0;
len=string_length(text);
szyfr='';
for(i=1; i<len+1; i+=1)
{
szyfr+=string(ord(string_char_at(text,i)))
+'x'+string(100+round(random(99)))
+'$';
}
return szyfr;
Teraz tworzymy drugi skrypt i nazywamy go odszyfruj.
kodtext=argument0;
pos=0;
len=string_count('$',text);//zamień to $ przy zamianie innych!
szyfr='';
for (i=1; i<len+1; i+=1;)
{
pos=string_pos('x',text);
szyfr+=chr(real(string_copy(text,1,pos-1)) );
/*pos - 1 -> pobiera text do pozycji o 1 mniejszej
od pozycji znaku 'x' */

len2=string_length(text);
pos=string_pos('$',text);
text=string_delete(text,1,pos);
/*pos - 1 -> kasuje text z pozycja znaku '$' */
}
return szyfr;

Teraz stwórz obiekt i daj mu w create kod:
kodtxt='tekst do zaszyfrowania';
txt2=zaszyfruj(txt);
txt3=odszyfruj(txt2);

a teraz w draw:
koddraw_text(0,0,txt2);
draw_text(0,16,txt3);

Możesz uruchomić program.
Na ekranie ukaże się niemieszczący się w ekranie napis:
696x187$606x142$642x155$690x141$696x165$192x130$600x185$666x161$
192x104$732x105$582x157$690x131$732x192$726x145$612x102$684x132$
666x177$714x197$582x130$660x142$630x174$582x160$
Jest to nasza zaszyfrowana wiadomość.

Teraz napewno nikt tego nie odkoduje. No chyba, że widział ten artykuł, dlatego teraz wytłumaczę jak dodatkowo zabezpieczyć.

W pętli FOR pobieramy kolejne litery. Przetwarzamy je na ASCII, potem dodajemy znak x losową liczbę z zakresu 100-199 i znak $, który oznacza koniec danego znaku. Aby utrudnić komuś zadanie, możemy napisać:
kodszyfr+=string(ord(string_char_at(text,i))*5)wtedy każdy znak będzie mnożony przez 5. Mozna wpisać tutaj dowolną liczbę, lub działanie (wtedy umieść je w nawiasach). Należy wtedy jeszcze w odszyfrowywaniu dodać:
kodszyfr+=chr(real(string_copy(text,1,pos-1))/5);aby liczba przed odszysfrowaniem została podzielona przez to przez co wcześniej ją mnożono.

Jeżeli wykorzystacie skrypt w swojej grze, napiszcie o mnie w creditsach.
Komentarze (łącznie 15):
gnysek (Sob., 11 Cze. 05, 19:15)
#1

Oczywiście, to jest jedna z łatwiejszych form szyfrowania, skrypt po pięciu minutach przeróbki zamienia liczby na litery i wtedy szansa odszyfrowania spada drastycznie.

Tymon (Sob., 11 Cze. 05, 19:41)
#2

Super :D Ale i tak ja bym zrobił to inaczej :D

b
bigshark (Sob., 11 Cze. 05, 21:11)
#3

nom nom fajne, ja bym to zrobił inaczej niz gnysek i jeszcze bardziej inaczej niz tymon ale fajne to jest i tak

Ranma_man (Nie., 12 Cze. 05, 09:45)
#4

No to podajcie swoje pomysły. :) Algorytmów kodowania jest bez liku. Uważam, że do niewielkiego typu danych kodowanie w GML jest całkiem dobrym rozwiązaniem. Natomiast przy bardzo dużych danych to chyba lepiej skorzystać z jakiegoś dll'a co by GM'a nie zabić. ;P

dziadekkleofas (Nie., 12 Cze. 05, 10:08)
#5

Najlepiej skompresować plik swoim własnym kompreserem ;p. Nikt oprócz ciebie nie rozpakuje tak więc nie rozszyfruje.

Tymon (Nie., 12 Cze. 05, 10:55)
#6

Ranma, przecież to by sie prawie na tym samym opierało. Tylko że ja to bym chciał zrobić na pojedyńczych znakach. Czyli np. literze P będzie odpowiadać S ;)

Marmot (Nie., 12 Cze. 05, 13:10)
#7

A czemu tak Tymon? Nie lepiej zastosować ROT-13? Pełno jest DLLi do tego, a algorytm jak nawet jest dość prosty do niego.

Ranma_man (Nie., 12 Cze. 05, 13:30)
#8

Tymon: Oczywiscie, ze by sie na tym samym opieralo, ale tu chodzi o SZYBKOSC gml'a.

FIREMARK (Nie., 12 Cze. 05, 19:50)
#9

lol :P
dobre to,przyda sie w pewnej mojej grze :P

B
Pietrus_paN (Sob., 25 Cze. 05, 16:05)
#10

Fajniutka sprawa :O :D :P :] :)

a
~anomymous (śro., 11 Sty. 06, 15:28)
#11

zrobiłem to co mówisz ale gra uruchamia się normalnie
:-(

BP Ultimate (Czw., 12 Sty. 06, 07:06)
#12

Przecież to jest artykuł na szyfrowanie, to co to ma wspólnego z odpalaniem gry?

kubasz (Pią., 04 Sty. 08, 16:02)
#13

Bo ja chyba zrobię trudne działanie matematyczne!!!
np. szyfr+=string(ord(string_char_at(text,i))*9+30-1)

Y
Yoda (Sob., 05 Sty. 08, 00:00)
#14

O ja ale trudne działanie - ja nie moge... O_O

a
adam014 (Sob., 05 Sty. 08, 12:18)
#15

@Yoda
Trudne czy nie trudne,ale jak by nie napisał to byś nie wiedział jakie i z rozszyfrowania nici :P

Najnowsze wersje GameMakera:

Stabilna
2024.2.0.132 • 2024.2.0.163
wydana 24 dni temu
LTS
2022.0.2.51 • 2022.0.2.49
wydana 163 dni temu
Beta
2024.400.0.526 • 2024.400.0.547
wydana  wczoraj
= IDE, = Runtime
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
49 użytkowników online na discordzie:
MKP, s..., Alice, Carl-bot, Sporek, p..., GibkiKaktus, Grela, p..., Add92, 21Lancz, Kowu, Kuzyn, OdrzuconyKrakers, Filyps, RogerDodg3r, YoungKrystian, Sevitaus, r..., antek, 🧁Cupcake🧁, Uzjel, lethian, HappyOrange, Pako, Arrekin, Dyno, 🆅🅸🆃🅾74🅼, Deusald, Korodzik, ZYGZAK, debil debilowski, 𝕳𝖚𝖌𝖔 𝕲𝖔𝖓𝖝𝖆𝖑𝖊𝖝, Miłosz, LeD, Ulti, m..., LadyLush, bagno, g..., Alkapivo, moeglich, Draczeq, Nikas, Krzysiek1250, Shockah, Kandif, TobiasM (Morgo), xVANiLL
Shoutbox
I am Lord (19:15, 17.03.24)
6h mam na to hmmm
I am Lord (19:06, 17.03.24)
Ale temat fajny
gnysek (01:33, 13.03.24)
Powinno działać, jest w kodzie sortowanie wg. najbliższego startu :)
Uzjel (21:59, 11.03.24)
Nie, ale za pierwszym razem zrobiłem fuckup, że było "Tura testowa" X_X
I am Lord (16:58, 11.03.24)
A co Uzjel już masz nawymyślane 100 tematów? 😅
Uzjel (20:08, 10.03.24)
@gnysek a jak bym dodał kilka lig na raz to walnie?
Uzjel (20:08, 10.03.24)
Liga będzie zawsze od piątku 16:00 do poniedziałku 23:59, zawsze w środku miesiąca.
gnysek (08:48, 10.03.24)
Tak, to też jest do poprawy X_X
Adriann (18:22, 09.03.24)
Tylko myślę czy nie leiej gdyby mówiło że zostało tyle i tyle dni i ileś godzin a nie tylko w godzinach ;d Albo konkretna data obok, byłoby czytelniej
I am Lord (15:08, 08.03.24)
o super z tą ligą :)
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?