Szyfrowanie tekstu metodą XOR

Poniedziałek, 20 Kwietnia 2009, 21:09
Czas czytania 1 minuta, 51 sekund
Zgodne z GM: gm5 gm6 gm7 gm8 gms2
Jak szybko i skutecznie zaszyfrować tekst.
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).

kod 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:

kod
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ą ...
Komentarze (łącznie 30, wyświetlam 1 - 15):
P
Pental (Pon., 20 Kwi. 09, 21:16)
#1

Proste i oczywiste, przyda się wszystkim, którzy mają nieco gorsze sposoby :) .

A
Axlii (Pon., 20 Kwi. 09, 21:21)
#2

dobre 10/10 :D i szybkie i latwe no no <<<!!!GZ!!!>>> to najlepszy skrypt swiata 2009 roku :P :DDDD

P
PsichiX (Pon., 20 Kwi. 09, 21:36)
#3

...mimo iż jeszcze trochę mu do zapewnienia wysokiego bezpieczeństwa brakuje ;P

gnysek (Pon., 20 Kwi. 09, 21:37)
#4

Hah, ale zobacz, większość normalnych ludzi nawet nie wie co to XOR, więc pomyśli, że tego nie da się odszyfrować. I o to chodzi.

P
PsichiX (Pon., 20 Kwi. 09, 21:39)
#5

no ale nie rób wstydu i chociaż coś dodaj proszę bo tak to: XOR goły - user niewesoły, gdy mu odkodują dane brute forcem na przykład :P

Hunter (Pon., 20 Kwi. 09, 21:39)
#6

Nieźle nieźle, zapewne nie uzyje ale wielu osobom moze sie przydac :)

gnysek (Pon., 20 Kwi. 09, 22:34)
#7

PsichiX - masz okazję się wykazać. Myślę, że dla naszych użytkowników trzeba tworzyć proste i logiczne rozwiązania, a nie skomplikowane pełne trudnych słów. Dla tego nie tłumaczyłem czym jest XOR, tylko napisałem, że dwukrotne wykonanie tej operacji z tym samym kluczem zwraca nam początkowy wynik.

Robert Prus (Pon., 20 Kwi. 09, 22:48)
#8

Proste łatwe i przyjemne prawie jak encrypt.dll!
Gut dżob!

P
Pieter (Wto., 21 Kwi. 09, 12:26)
#9

Dzięki ;) tego szukałem ;p

XxMichałxX (Wto., 21 Kwi. 09, 15:29)
#10

fajny skrypt, łatwy, krótki wydajny i odrazu go zrozumiałem :P thx gnysek

S
Snake (Wto., 21 Kwi. 09, 18:30)
#11

Może być ;p
"Poza tym, nie każdy wpadnie na to, że szyfrujemy tak banalną metodą..."
Ja tam zawsze sprawdzam najpierw czy ktoś użył tej metody - najczęściej stosowana przez newbies ;o

btw. odwracać bity na pojedynczych znakach można tylko z liczbą (kluczem) w zakresie 0-255, 666 to tak jakby XORować z liczbą 154 ;d + xor z 32 pozamienia małe na wielkie litery i vice versa ;p

Tymon (Wto., 21 Kwi. 09, 19:27)
#12

Co nie znaczy, że zła. Sprawa dość wystarczająco się komplikuje gdy zamiast jednego klucza używa się całego stringa.

gnysek (Wto., 21 Kwi. 09, 19:57)
#13

Snake, masz rację. W ogóle, to jest śmieszne, bo jak robiłem 10 xor 10 to wychodziło 1, a 1 xor 10 to znów 1... więc musiałem użyć ^ i okazało się, że to nie to samo xD

HuderLord (Czw., 15 Paź. 09, 21:32)
#14

Można tym szyfrować pliki graficzne?

P
PsichiX (Czw., 15 Paź. 09, 21:43)
#15

mozna, ale xor sam jest za slaby, mowie, lepiej juz xor+rotacja+xor jak chcesz zachowac szybkosc

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
2 użytkowników aktywnych:
gości: 1, userów: 1
 Adriann
(~ostatnie 15 minut)
Discord
44 użytkownicy online na discordzie:
MKP, s..., Alice, Carl-bot, GibkiKaktus, Grela, Wielki Druid, p..., Add92, 21Lancz, Filyps, fervi, YoungKrystian, Sevitaus, Radek Ignatów, Kalor, PhysX ᴺⱽᴵᴰᴵᴬ, r..., antek, 🧁Cupcake🧁, Uzjel, Pako, Arrekin, yazaa, Dyno, 🆅🅸🆃🅾74🅼, Korodzik, ZYGZAK, debil debilowski, Miłosz, LeD, Ulti, m..., LadyLush, bagno, Tidżi, Mtax, g..., l..., Alkapivo, moeglich, Krzysiek1250, Shockah, Kandif
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?