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 55 dni temu
LTS
2022.0.2.51 • 2022.0.2.49
wydana 384 dni temu
Beta
2024.1100.0.665 •
2024.1100.0.691
 0.13.0

wydana  4 dni temu
= IDE, = Runtime, = GMRT
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
42 użytkownicy online na discordzie:
🧁Cupcake🧁, Nikas, s..., Alice, Nitro Slav, Carl-bot, Saus, lethian, Alkapivo, Kowu, GMRussell, Gameduro, OdrzuconyKrakers, HappyOrange, fervi, r..., antek, Michał Parkoła, Pako, Arrekin, LadyLush, yazaa, Domeen0, Dyno, 🆅🅸🆃🅾74🅼, Deusald, szmalu, Morro, LeD, Miłosz, sutikku, Marco, 21Lancz, Ulti, bagno, Tidżi, g..., Sporek, l..., moeglich, Kandif, xVANiLL
Shoutbox
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
gnysek (11:54, 14.08.24)
Ruszyła beta nowego runtime, a stary dostanie już tylko dwa ficzery (UI Layery i obsługę SVG jako vertexy).
Wojo (11:51, 14.08.24)
Co się stało?
gnysek (18:31, 25.07.24)
Ogłaszam nowy etap w historii GameMakera.
gnysek (11:36, 08.07.24)
Ale w sumie taki numer GG był bezpieczniejszy niż nr. telefonu czy kontakt społecznościowy. Utrudniał stalkowanie i ułatwiał banowanie.
Wojo (08:08, 08.07.24)
Niestety to już nie te czasy kiedy pytało się kasjerki o wiek i numer Gadu-Gadu...
Adriann (08:28, 05.07.24)
Albo okraść :|
Adriann (08:28, 05.07.24)
Może pani chciała zobaczyć twoje dane i Cię poderwać :d
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?