Fastbar
Powrót do strony głównej
Trzymaj pliki na gmclan.org!
Game Maker w pytaniach i odpowiedziach!
Polska dokumentacja
Tabela wyników ligi 24
Pobierz GM
Akademia GMCLANu
Kategorie bazy artykułów
Artykuły -> Game Maker -> Kursy GML
Treść artykułu
Szyfrowanie tekstu metodą XOR
autor: gnysek (20.04.09)
Tworzysz grę i chcesz szybko zaszyfrować np. list wyników, czy zapis stanu gry, tak aby gracz nie mógł go edytować? Trzeba zatem swoje dane zaszyfrować. Jak zrobić to szybko? Używając metody XOR. Jeżeli nie wiesz czym jest XOR odsyłam do lektury na Wikipedię.
XOR ma tą magiczną właściwość, że cokolwiek przez niego przepuścimy daje nam inną liczbę, ale przepuszczone ponownie daje początkowy wynik.

Pierwsze co zrobimy, to skrypt doXor (dodaj skrypt w folderze Scripts).

gml:
var _klucz,i,_znaki,_len;
argument0 = string( argument0 );
_znaki = '';
_len = string_length( argument0 );
_klucz = 666;


for ( i = 1; i <= _len; i += 1 )
{
_znaki += chr( ord( string_char_at( argument0, i ) ) ^ _klucz );
}

return _znaki;


Po kolei opowiadam co on robi:
1. Tworzymy zmienne tymczasowe - nasz klucz szyfrowania, i potrzebne do pętli, znaki to zmienna która zapamiętuje zaszyfrowany tekst, a len to długość podanego tekstu.
2. W razie gdyby argument przekazany do skryptu był cyferkami, zamieniamy go na string.
3. Ustalamy znaki na pusty string.
4. Sprawdzamy długość tekstu.
5. Ustalamy sobie nasz klucz. Ten sam klucz musi być użyty do odszyfrowania.
6. Zaczynamy pętlę od 1 do ostatniej litery naszego stringa.
7. Do zmiennej znaki dodajemy wynik działania naszej magicznej funkcji szyfrującej.
Od środka: kopiujemy znak na pozycji i, zamieniamy go na liczbę kodu ASCII ( ord ), za pomocą funkcji XOR ( ^ ) porównujemy z naszym kluczem, a potem z powrotem zamieniamy na string (chr). Całość dodajemy do zmiennej znaki.
8. Zwracamy zaszyfrowany tekst.

Sprawdzamy działanie programu.

Tworzymy nowy obiekt. W create dajemy kod:

gml:

txt = 'test szyfrowania xor';

txt = doXor( txt );
show_message( txt );

txt = doXor( txt );
show_message( txt );


Uruchamiamy program. Jak widać, po pierwszym szyfrowaniu dostajemy co najmniej dziwne literki, po ponownym szyfrowaniu wszystko jest jak było.

Ot i cała tajemnica.

Ahh.... ustawcie własny klucz, dla bezpieczeństwa.
Pamiętajcie, ten sposób jest dość prosty do złamania, ale tak naprawdę każdy system da się złamać, najważniejsze jest to, że 99% osób zniechęci się widząc krzaczki i nie będzie szukać sposobu na odszyfrowanie zawartości. Poza tym, nie każdy wpadnie na to, że szyfrujemy tak banalną metodą ...
głosów: 11 | ocena: 8.45 oceń zasób | dodał: gnysek
Komentarze
stron: 21

2


av

Makary155 (18:56, 18.05.2011)

Dodam że siła kryptograficzna xor leży w długości klucza. Przy spełnieniu kilku warunków można uczynić z niego one-time pad, metodę odporną na brute force. Jedyny problem to przekazanie wygenerowanego hasła odbiorcy.

av

gnysek (20:41, 18.05.2011)

Jeśli szyfrujesz literka po literce, to długość klucza nie ma znaczenia, bo ASCII które mamy w GM8.0 to raptem 255 znaków, zatem kluczem będzie zawsze modulo 256.

av

Makary155 (21:28, 18.05.2011)

Nawet jeśli każda literka ma inny klucz?

av

gnysek (21:34, 18.05.2011)

No, a ja odszyfrujesz jak dasz każdej literce inny klucz ?

av

Platyna (21:51, 18.05.2011)

Wystarczy by kolejność stosowanych kluczy była stała. Jakakolwiek funkcja. Najlepiej potęgi dużej liczby pierwszej.

av

Mentoss (22:11, 18.05.2011)

to ciekawy pomysł...

av

Makary155 (9:41, 19.05.2011)

gnysek: szyfruję tekst "gmclan" szyfrem "omglol". Teraz nowy tekst=ord('g' xor ord('o' + ord('m' xor ord('m' + ord('c' xor ord('g' itd. Nie xoruję przez tą samą liczbę każdą literę, o to mi chodzi.

av

gnysek (14:29, 19.05.2011)

No tak, jeśli to jest stała kombinacja to owszem. Nie wiem dlaczego pomyślałem o pewnej losowości klucza - może dla tego, że to utrudniało by odszyfrowanie... ale z drugiej strony, jako pierwszy znak można by wcale nie podawać pierwszej litery, ale własnie jakiś identyfikator mówiący jaki zestaw kluczy użyć - i wtedy faktycznie jest to jakaś losowośc.

av

Makary155 (14:53, 19.05.2011)

Losowość i unikalność klucza wymagana jest do one-time pada, problem to przekazanie tego klucza odbiorcy. Podobno korespondencje rządów usa i rosji były kodowane w ten sposób + klucz długości samej wiadomości

av

Mentoss (15:44, 19.05.2011)

To też ciekawa opcja, jednakże losowośc klucza jest strasznie prosta, jeżeli pierwszy/trzydziesty drugi/osiemset szesnasty/ostatni znak ma byc taki sam. Wtedy znajdujemy dany znak, na pętli for/while/do wyciągamy sobie klucz i odszyfrowujemy dokument. Zrobiłem sobie nawet paczkę skryptów do tego i szczerze mówiąc - działa.

stron: 21

2



Dodaj komentarz:
Treść:
Menu
Panel użytkownika
Jesteś niezalogowany!

Nie masz konta? Zarejestruj się
Użytkownicy on-line
5 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 4, userów: 1, ukrytych: 0
Chell
Użytkownicy na czacie discord
Uzjel (22:42, 25.05.18):
Max, spróbuj piktochart
PsichiX (20:46, 25.05.18):
ale ja mowie serio. Ty chcesz infografike, ja mowie Ci moja cene za to.
Wojo (19:51, 25.05.18):
penguin robisz świetne pixelki
MaxGaming (19:11, 25.05.18):
Psichix nie próbuj być na siłę śmieszny bo Ci to nie wychodzi...
Danielus (19:11, 25.05.18):
RODO z GMC trafia do spamu w gmailu :d
PsichiX (18:44, 25.05.18):
50zl za 1024 piksle kwadratowe
MaxGaming (16:31, 25.05.18):
Jest ktoś kto mógłby mi machnąć infografikę?
gnysek (11:54, 25.05.18):
Toż bym z tych 20zł miesięcznie nie wypłacił sobie ZUSu za GMCLAN
gnysek (11:53, 25.05.18):
No moja firma działa jeszcze gdzieś indziej Poza tym, regulamin jest wspólny dla wszystkich stron, kosztowało mnie to dopisać "gmclan.org" do listy
Wojo (11:40, 25.05.18):
ale gmclan moze miec kare w granicach 6zł chyba ze gdzies indziej jeszcze dzialacie
gnysek (23:03, 24.05.18):
Kara jest od obrotów firmy, nie strony
Wojo (18:46, 24.05.18):
nie ma potrzeby tego robic imo, jakbys dostal mandat to przychód z gmclanu napewno go pokryje xD
gnysek (15:34, 24.05.18):
Niestety, pewnie wieczorem dodam popup o ciastkach również
gnysek (15:26, 24.05.18):
Jesteśmy gotowi na RODO, dodałem Politykę Prywatności
Ignatus (23:06, 20.05.18):
To bedzie w zasadach opcjonalnych- no i tylko jezeli przejdzie solidne testy, bo teraz dziala to wszystko idealnie wiec nie ma co kombinowac
I am Lord (22:58, 20.05.18):
Nie przekombinuj, chyba że chcesz zostawić to jako opcję dla zaawansowanych
Ignatus (22:49, 20.05.18):
wiec wrzucilem jako cel przyszly
Ignatus (22:49, 20.05.18):
ale to jeszcze nie przetestowane wiec do bazowej gry nie dodalem
Ignatus (22:49, 20.05.18):
to by dzialalo tak ze jezeli gracz ulozy karty o wartosci 1,2,3 (i w tej kolejnosci) dobiera 1 z 3 kart specjalnych
Ignatus (22:48, 20.05.18):
Jeszcze planuje przy przekroczeniu celu kampanii 10k dorzucic kilka kart i umiejetnosci
Ignatus (22:48, 20.05.18):
Pewnie że tak
I am Lord (22:42, 20.05.18):
żeby było więcej kart
I am Lord (22:41, 20.05.18):
kupując np 2 zestawy gry
I am Lord (22:41, 20.05.18):
zmodyfikować zasady*
I am Lord (22:40, 20.05.18):
zawsze można będzie zmodyfikować sobie jak się chce mieć losową rękę
Ignatus (22:33, 20.05.18):
Niektórzy na Pyrkonie dosłownie po 5 minut myśleli nad ruchem
Ignatus (22:32, 20.05.18):
Zerowa losowośc- gracze mają do dyspozycji symetryczne talie 7 kart od początku do dyspozycji.Jest takie ciężkie kombinowanie że aż sam jestem w szoku
I am Lord (22:28, 20.05.18):
Teraz przeczytałem opis gry Humor taki jak u Pratchetta
I am Lord (22:13, 20.05.18):
A powiedz mi jak dużą rolę gra szczęście? Kółko i krzyżyk był grą o zerowym szczęsciu, nie da się go wygrać gdy staną przeciwko sobie przeciwnicy na tym samym poziomie. U ciebie elementem losowym jest talia kart tak? Czy rozdanie mocno wpływa na przebieg gry?
I am Lord (22:11, 20.05.18):
Przez ciebie mam chęć zrobienia takiej gierki samemu
Uzjel (22:00, 20.05.18):
Od razu z góry mogę zaproponować port na iOS'a, bo właśnie się uzbroiłem w CAŁY sprzęt Powodzenia!
Ignatus (21:54, 20.05.18):
A jezeli sie powiedzie to oczywiscie bede to przekuwał w multi na andka w przyszłości
Ignatus (21:53, 20.05.18):
Ujzel:wydawcą jest póki co wspieram.to ;p Ale juz rozmawiam z jednym sklepem większym który mnie wychaczyl na Pyrkonie
Ignatus (21:51, 20.05.18):
Jak się skonczy kampania to beda chodzic w sklepie po 30-35 wiec na pewno jakis zysk bedzie
Ignatus (21:50, 20.05.18):
Bardzo dziękuje!!!!!!!!
Uzjel (21:50, 20.05.18):
O! Albo sprzedam z zyskiem!
Uzjel (21:50, 20.05.18):
Na początku czerwca mam ostatnie zajęcia, więc pewnie się nie uda Rozdam planszówkowym kolegom.
I am Lord (21:49, 20.05.18):
Może ich też to natchnie
I am Lord (21:49, 20.05.18):
To rozdaj maluchom ze szkoły
I am Lord (21:41, 20.05.18):
a nie bo przesyłka będzie kłopotliwa :d
I am Lord (21:41, 20.05.18):
Na gmclan do konkursu
Uzjel (21:34, 20.05.18):
Też dorzucę, ale nie wiem co zrobię z dodatkowymi sztukami :p
I am Lord (21:30, 20.05.18):
Wow ignatus zasady wyglądają na faktycznie grywalne, nie mam i tak z kim w to zagrać chyba że zrobisz kiedyś giereczkę na PC czy androida ale dorzucę grosza
Uzjel (21:25, 20.05.18):
Fajnie Ignatus, kto będzie wydawcą?
Ignatus (19:46, 20.05.18):
Panowie zachęcam do wspierania mojej kampanii gry karcianej.Po prawie 100 partiach na Pyrkonie nieskromnie stwierdzam ze jest zajebsicie grywalna. wspieram.to/czarowieze
Wojzax (19:27, 20.05.18):
No mi najwięcej oryginalnych pomysłów wpada gdzieś w plenerze. Nie że związanych z tym plenerem po prostu tak wyjście mi czasem działa na mózg.
Wojo (19:15, 20.05.18):
za pieniądze z genialnego pomysłu możesz spłacić kredyt za który się wyprowadziłeś
Wojo (19:14, 20.05.18):
wniosek jest taki, że trzeba wyprowadzić się do ciepłych krajów
Sutikku (14:52, 20.05.18):
zawsze jak jest ciepło to tyle pomysłów do tworzenia, a jak jest zima siedzi się w domu, tyle czasu i nic
I am vader (10:33, 19.05.18):
Bry :v
Ankieta
» Jakie kursy najchętniej widziałbyś na stronie ?
GM Studio
GM Studio 2
Godot
Construct

GMCLAN to serwis o programie Game Maker i nie tylko.
[ Polityka prywatności ]
Copyright © 2002-2018. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!
© 2002-2017 Ranmus (ranmus.pl), © 2017-2018 {=|=} fable_inside();

[ Czas generowania strony: 0.02061 sekund ] [ Liczba zapytań MySQL: 13 ]