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.8.1.171 • 2024.8.1.218
wydana 72 dni temu
LTS
2022.0.3.83 • 2022.0.3.98
wydana  dziś
Beta
2024.1100.0.686 •
2024.1100.0.707
 0.13.0

wydana  6 dni temu
= IDE, = Runtime, = GMRT
Użytkownicy online
3 użytkowników aktywnych:
gości: 1, userów: 2
S Sutikku,  Adriann
(~ostatnie 15 minut)
Discord
49 użytkowników online na discordzie:
Kysiu, 🧁Cupcake🧁, Nikas, Alice, Carl-bot, EchoDuck, lethian, Wielki Druid, m..., Kuzyn, GMRussell, Gameduro, OdrzuconyKrakers, Filyps, fervi, PhysX ᴺⱽᴵᴰᴵᴬ, r..., antek, Michał Parkoła, HappyOrange, Moldis, LolikZabijaka, Pako, Arrekin, firemark, MagnusArias, LadyLush, yazaa, Domeen0, Dyno, 🆅🅸🆃🅾74🅼, szmalu, Miłosz, sutikku, p..., Voytec, Ulti, m..., bagno, Danieo, g..., Jayu, s..., d..., Add92, Krzysiek1250, Shockah, Cosplyfanka, xVANiLL
Shoutbox
gnysek (11:46, 17.11.24)
Witamy, witamy!
baca (12:22, 16.11.24)
To już 25 lat.. Witam po paru latach nieobecności.
gnysek (11:05, 15.11.24)
Natomiast obecne forum istnieje od 2004, jak z iglu.cz na gmclan.org przeszliśmy i od tego czasu nie było resetów danych.
gnysek (12:35, 13.11.24)
Ogólnie GMCLAN istnieje 22 lata, ale na to trofeum nie zrobiłem (jeszcze xD)
Chell (20:41, 08.11.24)
wow, ta emotka w ogóle nie wygląda jak : O xD
Chell (20:40, 08.11.24)
tylko? :O 4tk ma 15
Borek (18:12, 07.11.24)
Właśnie dostałem powiadomienie z forum, że jestem na GMClanie 18 lat :D Ja pierdzielę...
S
Sutikku (08:43, 18.10.24)
TIL, gamemaker jest starszy ode mnie
gnysek (16:04, 15.10.24)
Za równo miesiąc, GameMaker kończy 25 lat.
Wojo (15:38, 05.09.24)
Ciekawe
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?