//******PROGRAM PRO SIFROVANI OBECNEHO SOUBORU VIGENEROVOU SIFROU
//******PRO VYHEN HIPP 1996
#include <io.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define byte unsigned char
// delk bufferu
#define BufL 1000
char main(int argc,char ** argv){
 //naplnena delka bufferu, citac v cyklu (holka pro vsechno)
 unsigned int bleng,c;
 int  f1,f2;//vstupni a vystupni soubor
 //buffery, klic, posice v klici, delka klice
 byte buf[2][BufL],klic[256],pos={0},dk;
 printf("\nProgram na zasifrovani obecnych souboru\n");
 if (argc<3) {//malo parametru
        printf("obsif.exe vstupni.sou vystupni.sou\n");
        return -1;
        }
 if ((f1=open(argv[1],1))==EOF) {
        fprintf(stderr,"Soubor %s nenalezen\n",argv[1]);
        return -1;
      }

 if ((f2=open(argv[2],258))==EOF) {
        fprintf(stderr,"Soubor %s nelze vytvorit\n",argv[2]);
        close(f1);
        return -1;
      }

  //zadava klic
    printf("Zadej klic : ");
    scanf("%s",klic);
  dk=strlen(klic);
 //sifrovat nebo desifrovat ? tot otazka
  printf("Chces sifrovat ci desifrovat ? (S x D)\n");
  do{
      c=getch();
  } while ((c!='D') && (c!='S') && (c!='d') && (c!='s'));
 //meni klic pro desifrovani
 if ((c=='D') || (c=='d'))
      for (c=0;c<dk;c++) klic[c]=(256-klic[c]);
 //nacita soubor do bufferu a zapisuje do druhyho
 while ((bleng=_read(f1,&buf[0][0],BufL))!=0){
   //sifruje buffer
   for (c=0;c<bleng;c++,pos++){
     if (pos==dk) pos=0;
     buf[1][c]=(buf[0][c]+klic[pos]);//pricita klic
   }
   _write(f2,buf[1],bleng);//zapisuje buffer do souboru
 }
 close(f1);
 close(f2);
}


            výheň