//Autor: Artur Czekalski (Sator) www.epokaY.net/artur artur@epokaY.net //Szyfrowanie RC4 import std.c.windows.windows; //GetTickCount import std.stdio; //writefln //--------------------------------------------------------------------------- const uint gDlTablicy = 10000000; ubyte gTablica[gDlTablicy]; //--------------------------------------------------------------------------- void SzyfrujRC4(const uint DlTablicy, ubyte *Tablica, const uint DlHasla, const ubyte *Haslo) { uint i, j, x; uint perm[256]; //permutacja //---inicjalizacja--- for (i=0; i<256; ++i) perm[i] = cast(ubyte)i; j = 0; for (i=0; i<256; ++i) {j = (j + perm[i] + Haslo[i % DlHasla]) % 256; x=perm[i]; perm[i]=perm[j]; perm[j]=x; //perm[i]<->perm[j] } //---szyfrowanie--- i = 0; uint Index = 0; while (Index < DlTablicy) { i = (i+1) % 256; //[A3] j = (j + perm[i]) % 256; //[B2] x=perm[i]; perm[i]=perm[j]; perm[j]=x; //perm[i]<->perm[j] Tablica[Index++] ^= perm[(perm[i]+perm[j]) % 256]; //XOR } }; //=========================================================================== int main(char[][] args) {int i, czas; char Haslo[16] = "sator"; uint DlHasla = 5; //---Spr. for (i=0; i<10; ++i) gTablica[i] = cast(ubyte)('a'+i); writefln("Przed szyfrowaniem:"); for (i=0; i<10; ++i) printf("%02X ", cast(int)gTablica[i]); SzyfrujRC4(gDlTablicy, cast(ubyte*)gTablica, DlHasla, cast(ubyte*)Haslo); writefln("\nPo szyfrowaniu:"); for (i=0; i<10; ++i) printf("%02X ", cast(int)gTablica[i]); //---Test for (i=0; i