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.13.1.193 • 2024.13.1.242
wydana 184 dni temu
LTS
2022.0.3.85 • 2022.0.3.99
wydana 319 dni temu
Beta
2024.1400.0.907 •
2024.1400.0.896
 0.17.0

wydana  4 dni temu
= IDE, = Runtime, = GMRT
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
Shoutbox
gnysek (16:01, 16.10.25)
To już google decyduje. Mam wrażenie, ze po datach obcina stare treści.
S
Sutikku (10:42, 14.10.25)
Ja jeszcze trafiam na fora jak szukam konkretnych haseł (chociażby wczoraj zepsuty pendrive który się identyfikuje jako Phison 2307 Boot ROM). Teraz projekty opensource często mają społeczności na discordzie i tam jest tona przydatnych informacji ale niedostępna poza discordem. Fajnie by to było wyeksponować
Korodzik (04:24, 14.10.25)
A w sumie to forum się normalnie indeksuje w wyszukiwarkach? Bo ja stwierdziłem, że np. w Google ciężko znaleźć cokolwiek z gmclanowego forum. Większość tematów jest chyba nieindeksowana od dawna...
S
Sutikku (08:44, 13.10.25)
mam niedokończony projekt bota, którego dodaje się do discorda, a on synchronizuje wiadomości z discorda -> na readonly forum. Wtedy treści mogą być indeksowane z wyszukiwarek i łatwo dostępne bez logowania. No ale leży w czyśćcu i czeka.
Wojo (11:52, 11.10.25)
Może kiedyś powróci moda na fora internetowe. Pamiętam w sumie, że czasami aktywność rosła i malała, ale tak pusto to chyba jeszcze nigdy nie było i myślę, że ta cała migracja użytkowników jest zasługą Discorda i zmiany czasów. Po prostu lata dwudzieste spowodowały zmiany trendów w internecie
S
Sutikku (09:06, 08.10.25)
najwyższa pora zopensourcować kod gmclanu!
gnysek (10:33, 06.10.25)
Może tak zrobię :D Jak znajdę czas :D
I am Lord (10:49, 01.10.25)
Tutaj powinna być na głównej jakaś wielka informacja o tym że na Discordzie teraz wszystko jest
Wojo (20:34, 17.07.25)
Discordy i Facebooki pogrzebały erę forów internetowych...
gnysek (10:36, 04.07.25)
Bo wszyscy piszą na discordzie :)
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?