Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2009, 16:03   #1
Сергей Человек
Пользователь
 
Регистрация: 06.07.2009
Сообщений: 13
По умолчанию Помогите с Шифрованием на С++

Ребята помогите пожалуйста с програмой для шифрования, у мея она по суте готова мне нужно только поменять ввод ключа, нужнов водить его с командной строки путь к ключу который записан в текстовом файле.. выложу код програмы...спасибо...
//---------------------------------------------------------------------------
Код:
#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;//возвращаем адрес нулевого элемента перекодированного массива
}

Последний раз редактировалось Sazary; 30.11.2009 в 16:36.
Сергей Человек вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста с шифрованием! AnutkaSolnce Помощь студентам 5 19.05.2007 21:32