#include #include #include int ordered[256]; int reversed[256]; int streamout[256]; int encrypt(); int decrypt(); void printout() { printf("\n**************************************************************************"); printf("\n* *"); printf("\n* STREAMBUDDY a cipher by JT [Turbo C 2.01] *"); printf("\n* (The code looks funny i know but it works mainthing?;) *"); printf("\n* Buddy variable sized cipher, key 1>-256 bytes, int state 4096-bits *"); printf("\n* Key is expand into two streams, each run a keybased shuffle 256bytes *"); printf("\n* Every round the shuffle are dowmmixed to 1 stream with a saved state *"); printf("\n* Stream A xor B-> xor mixpad ->xor streamout[savedstate]->xor plaintxt *"); printf("\n* A zero filled 102 MB file called plain.txt is created at start +-1min *"); printf("\n* *"); printf("\n* The encoded file cipher.txt, and the decoded file decipher.txt +-1min *"); printf("\n* *"); printf("\n**************************************************************************"); printf("\n\n\n"); } /*PRNG*/ int streambuddy() { int mixpad[256]; int slot_1,slot_2,slot_3,slot_4; int i; for(i=0;i<255;i++) { slot_1 = ordered[i+1]; slot_2 = ordered[slot_1]; ordered[slot_1] = ordered[i]; ordered[i] = slot_2; slot_3 = reversed[i+1]; slot_4 = reversed[slot_3]; reversed[slot_3] = reversed[i]; reversed[i] = slot_4; } for(i=0;i<256;i++) { mixpad[i] = reversed[i] ^ ordered[i]; } for(i=0;i<256;i++) { streamout[i] ^= mixpad[i]; } return 0; } /*KEYXPAND*/ int keyexpander(int key[], int keysize) { int serie[256]; int i=0,j=0,k=0; int stop=0; int found=0; for(i=0;i<256;i++) { stop=0; while(!stop) { found = 0; for(k=0;k 255) { key[j]=0; } } j++; if(j > keysize-1) {j=0;} } for(k=0;k<42;k++) { for(i=0;i<255;i++) { int slot_1,slot_2; slot_1 = serie[i+1]; slot_2 = serie[slot_1]; serie[slot_1] = serie[i]; serie[i] = slot_2; } } for(i=0;i<256;i++) { ordered[i]=serie[i]; } return 0; } int ireverse() { int i;int j=0; for(i=255;i>-1;i--) { reversed[j] = ordered[i]; j++; } for(i=1;i<255;i++){ } return 0; } int main(void){ printout(); encrypt(); decrypt(); return 0; } int saltIV(int keyread[]){ int i; srand(clock()); for (i=0;i<4;i++){ keyread[i]=rand()%256; } return 0; } int decrypt() { int keyread[256]; int text[256]; int keysize=0; int i,j,k; FILE* in; FILE* out; printf("\n\n\nInput password for decode: "); keysize=4; in=fopen("cipher.txt","rb"); /*GET KEY SALTIV+PASSWD*/ for(i=0;i<4;i++){keyread[i]=getc(in);} while ((keyread[keysize]=getchar())!=10){keysize++;} printf("\n\nIV+password:"); for(i=0;iIV+PASSWORD*/ saltIV(keyread); printf("\n\n\nInput password for encode:"); for(i=0;i<4;i++){fputc(keyread[i],out);} while ((keyread[keysize]=getchar())!=10){keysize++;} printf("\n\nIV+password:"); for(i=0;i