Ребята помогите пожалуйста с програмой для шифрования, у мея она по суте готова мне нужно только поменять ввод ключа, нужнов водить его с командной строки путь к ключу который записан в текстовом файле.. выложу код програмы...спасибо...
//---------------------------------------------------------------------------
Код:
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
#include<string.h>
#include<math.h>
#include"rus.h"
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
void main()
{
char* kluch; //резервируем адрес для ключевого выражения
ifstream inp("Input.txt");
ofstream out("Output.txt");
if(!inp)
{
cout<<Rus("ОТСУТСТВУЕТ ФАЙЛ Input.txt");
getch();
exit(1);
}
cout<<Rus("ВВЕДИТЕ КЛЮЧ (БЕЗ ПРОБЕЛОВ)");
cin>>kluch;
int n=strlen(kluch); //длина ключа
int b,j,i=0;
for(int k=0;k<n;k++)
{ //преобразование символов ключа в прописные
b=kluch[k];
if(b<=-33&&b>=-64)b+=32; //A->а,Б->б,...(русский алфавит)
if(b==-81||b==-88||b==-86)b+=16; //Ї->ї,Є->є,Ё->ё
if(b<=90&&b>=65)b+=32; //A->a, B->b,...(английский )
kluch[k]=b;
}
char temp,buffer=NULL;//buffer-считываемый символ,temp- преобразованный символ
while(!inp.eof()) //пока не достигнут конец файла
{
inp.read((char*)&buffer,sizeof(buffer));//считываем очередной символ
if(buffer==NULL)break;// если файл пустой
b=buffer;
//преобразование символов исходного текста в заглавные
if(b>=-32&&b<=-1)b-=32; //а->А,б->Б,...(русский алфавит)
if(b==-65||b==-72||b==-70)b-=16; //ї->Ї,є->Є,ё->Ё
if(b>=97&&b<=122)b-=32; //a->A, b->B,...(английский )
buffer=b;
j=fmod(i,n); // переменная j циклически изменяется от 0 до n-1
temp=buffer^kluch[j];// применяем операцию "исключающее ИЛИ"
out.put(temp); //записываем кодированный символ
i++; //переходим к следующему символу ключевого слова
buffer=NULL;
}
inp.close();
out.close();
cout<<Rus("ЗАШИФРОВАННЫЙ ТЕКСТ НАХОДИТСЯ В ФАЙЛЕ Output.txt");
getch();
}
//---------------------------------------------------------------------------
код библиотеки rus.h
unsigned char* Rus(unsigned char* st)/* функция Rus заменяет в строке
коды букв русского алфавита,
обеспечивает их правильное
отображение в окне консольного приложения*/
{
// В ANSI русские буквы кодируются числами от 192 до 255,
// в ASCII - от 128 до 175 (А..Яа..п) и от 224 до 239 (р..я).
unsigned char *p = st;/* *p-указатель на i-й элемент массива,
первоначально указывающий на нулевой элемент (по
адресу st);
каждый элемент массива представляет собой символ
в коде ANSI */
while (*p)// пока *(st+i)!='\0', где i-номер элемента массива
{
if ( (*p >= 192) && (*p <= 239))
*p -= 64;//переход от кода ANSI к коду ASCII для А..Я,а..п
if (*p >= 240)
*p -= 16;//переход от кода ANSI к коду ASCII для р..я
p++;//увеличиваем указатель на 1-переход к следующему адресу
}
return st;//возвращаем адрес нулевого элемента перекодированного массива
}