Programowanie w języku C/C++ » Artykuły

Szyfrowanie danych - XOR

  • 2009-10-08 15:40
  • 11 komentarzy
  • 8241 odsłon
  • Oceń ten tekst jako pierwszy
Szyfrowanie danych jest znanym tematem. Nie będę tłumaczyć jego celu.

Jedną z metod szyfrowania jest XOR. W C zapisuje się go a^b, a w ASM XOR a,b, co daje wynik do a.

Tablica prawdy dla tego działania:

a   b   a^b
0   1   1
1   0   1
0   0   0
1   1   0

XOR więc daje wynik 1 dla różnych bitów.

Warto pamiętać, że znając dwie liczby z powyższej tabeli można określić trzecią.

a==(ab)b   -   w tym równaniu można zredukować XOR

Wynika z tego bardzo prosta rzecz:

Szyfrowanie:   Deszyfrowanie:
a=ab;           a=ab;

Więc procedura szyfrowania (i deszyfrowania) ciągu wygląda tak:

void xorproc(char* array, char key, int size)
{
    int n=0;
    while(n<size)
    {
        array[n]=array[n]^key;
        n++;
    };
    return;
}


Oczywiście, zmienna char może mieć 256 różnych wartości, wystarczy tyle razy szyfrować ciąg, aby go odszyfrować bez znajomości klucza.

Jeden ze sposobów szyfrowania ciągów ciągami to kolejne szyfrowanie kolejnym elementem ciągu klucza. Ten sposób zastosowałem w AtB ACD 0.1, 1.0, 1.1.

Deszyfrowanie tym sposobem wymaga oczywiście odwrócenia ciągu klucza.

Szyfrowanie pliku polega na pobraniu pliku do ciągu, i później ciągu do pliku.

To mój pierwszy artykuł, więc może zawierać błędy.

11 komentarzy

Brak avatara
D2402 2013-11-18 20:10

w jaki sposób można uzyskać xor w exelu za pomocą operacji logicznych??
Błagam, informatyiem nie jestem, mam taką pracę tnz napisac jak to się robi na informatyę na studiach na kierunku medycznym ;/

Mammoth 2009-03-11 15:40

A propos "a==(ab)b"

Można wymienić dwie zmienne (obojętnej wielkości) między sobą nie używając przy tym trzeciej pomocniczej:

   a ^= b;
   b ^= a;
   a ^= b;

Dzięki temu nie mamy żadnej utraty danych.

harry666t 2007-05-09 00:20

> ale fakt faktem popieram przedmowcow tego sie nie uzywa


Chyba że umiesz wygenerować w 100% losowy klucz o tej samej długości co szyfrowana wiadomość.

Czysto teoretycznie, wtedy wiadomość jest absolutnie niemożliwa do odszyfrowania bez klucza.

W praktyce... kiedyś odgadłem raz jaki będzie następny bajt z /dev/urandom ;]

zbig 2006-01-25 18:57

To jaki sposób szyfrowania polecacie?

acotexas 2005-10-09 20:02

Widocznie mnie nie znasz! xor\'a można używać do sprawdzania czy dane flagi są ustawione. Mianowiecie jeśli mamy dany obiekt i metodę do ustawiania flag, to możemy szybko sprawdzić czy flagi są tak samo ustawione jak w przekazywanym argumencie. Może przykład:

int flag;  // globalna flaga zawierająca ustawienia wyświetlania grafiki 3D
 
 
int ustaw(int flaga)
{
if (flaga^flag==0) return -1; else        // jeśli te same ustawienia wyjdź
{
 
flag=flag | flaga;
// cały blok kodu sprawdzania pojedyńczych flag i ustawiania właściwości
// np:
 
if (flag & g_pelnyekran){
UstawPelnyEkran();
}
 
}
return 1;
}


Zaletą tego jest szybkie i efektywne sprawdzanie czy trzeba sprawdzać wszystkie flagi i niepotrzebnie uruchamiać jakieś funkcje. Może znacie inny szybszy sposób. I nie prawda, że xor\'a używa się tylko do kryptografii. Pozdrawiam
int flag;  // globalna flaga zawierająca ustawienia wyświetlania grafiki 3D


int ustaw(int flaga)
{
if (flaga^flag==0) return -1; else        // jeśli te same ustawienia wyjdź
{

flag=flag | flaga;
// cały blok kodu sprawdzania pojedyńczych flag i ustawiania właściwości
// np:

if (flag & g_pelnyekran){
UstawPelnyEkran();
}

}
return 1;
}



Zaletą tego jest szybkie i efektywne sprawdzanie czy trzeba sprawdzać wszystkie flagi i niepotrzebnie uruchamiać jakieś funkcje. Może znacie inny szybszy sposób. I nie prawda, że xor\'a używa się tylko do kryptografii. Pozdrawiam

marcinEc 2005-01-26 13:16

Faktem jest, że funkcja xor to podstawa matematyki ale, że nikt jej nie używa to przesada! Chrzanicie jak żaba o księżycu. Weżcie jakikolwiek szyfr blokowy lub strumieniowy: na pewno jest tam XOR, a OneTimePad jest praktycznie niełamalnym szyfrem, Office używa szyfru strumieniowego XOR. Weźcie też tryby pracy CBC, CFB i OFB.
Nie znasz się, to się nie wtrącaj.

TKW 2004-09-21 17:55

Z czwartego od końca akapitu wynika, że autor to stosuje (lub stosował).

madtroll 2004-08-27 19:37

w sumie wstyd sie przyznac ale kiedys w jednym programiku zakodowalem cos w xorze ale fakt faktem popieram przedmowcow tego sie nie uzywa

anubis 2004-07-05 14:20

w sumie nikt nie uzywa, jednak XOR do do dzisiaj jest jedna z podstawowych operacji elementarnych w wiekszosci kryptosystemow...
a co do samego arta.... ech.. nie powiem

Marooned 2004-07-03 01:54

Setny art o xorze... tylko kto tego używa? Nie znam nikogo takiego...

AklimX 2004-07-03 14:57

autor chyba był w śpiączce przez jakieś 15 lat :)