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 41 dni temu
LTS
2022.0.2.51 • 2022.0.2.49
wydana 180 dni temu
Beta
2024.400.0.532 • 2024.400.0.551
wydana 12 dni temu
= IDE, = Runtime
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
12 użytkownicy online na discordzie:
Carl-bot, p..., Grela, Kowu, antek, LadyLush, VanhGND, MKP (GEM), Dyno, szmalu, l..., Cosplyfanka
Shoutbox
gnysek (20:44, 11.04.24)
Niektórzy dlatego wybierają GMEdit. Ale ja liczę na Code Editor 2, tylko na razie zbyt zbugowany jest.
Tymon (16:11, 11.04.24)
Stitch dla mnie osobiście jest lepszy bo nie musze kopać się z interfejsem GMa i mogę tylko pisać kod.
Tymon (16:05, 11.04.24)
Yes. Obecny nie jest taki zły, jak zainstalowałem najnowszą stabilną to w porównaniu z tym czego używałem... 10 lat temu...? Wszystko wydaje się lepsze.
gnysek (22:48, 10.04.24)
bscotch/stitch ? Ja czekam na fixy do nowego edytora, bo wszystko wydaje się dziś lepsze od tego obecnego :D
Tymon (19:54, 10.04.24)
Hm, Stitch okazuje się całkiem dobrą alternatywą dla wbudowanego edytora
Wojo (22:16, 08.04.24)
siemano huder myślałem, że zniknąłeś całkiem z gmclanu bo na discordzie cie nie ma :D
I am Lord (00:37, 05.04.24)
O dzięki :D
gnysek (09:58, 02.04.24)
Znalazłem na podstawie jego postów: youtube.com/@Jakim_
I am Lord (20:16, 01.04.24)
Ktoś ogarnia jakie konto miał Jakim na YT?
gnysek (16:07, 29.03.24)
Nowy Edytor kodu jednak po świętach
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?