Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифр замены по алгоритму Цезаря, help.!!!!!!!!!!!!! 
:(
    Опции темы
BISKOT188
Дата 22.11.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.11.2008

Репутация: нет
Всего: нет



Код


#include <stdio.h>
#include <string.h>

void menu ( void ) {
   printf("Please enter a number: \n"
          "1-Encrypt\n"
          "2-Decrypt\n"
          "3-Exit\n"
          "prompt > ");
   fflush( stdout );
}

int getchoice ( void ) {
   char buff[BUFSIZ];
   int  choice = 0;
   do {
       menu();
       if ( fgets( buff, sizeof buff, stdin ) != NULL ) {
           /* success reading a line, does it make sense? */
           if ( sscanf( buff, "%d", &choice ) != 1 ) {
               printf( "Enter a number\n" );
           }
       } else {
           /* user EOF, just exit now */
           choice = 3;
       }
   } while ( choice < 1 || choice > 3 );
   return choice;
}

void encode ( void ) 
{
    char buff[BUFSIZ];
    int i = 0;
    int shift_value;
     printf( "Doing encrypt\n" );
    printf("\nPlease enter the text you wish to encrypt: ");
    fgets(buff, sizeof(buff), stdin);
        if ("%s"  > 'Z')
    {
       "%s" -= 'Z' - 'A';
    }
    printf("\nEnter your encryption shift value (anything from +-1 to 25): "); 
   scanf ("%i", &shift_value);
    
    

    {    
while ( buff[i] != '\0' )
     {
   buff[i] = buff[i] + shift_value;
   i++; 
   
     }
    }
printf("\n Your encrypted text is: %s \n", buff);
}
void decode ( void ) 
{
    char buff[BUFSIZ];
    int i = 0;
    int shift_value;
               printf( "Doing decrypt\n" );
    printf("\nPlease enter the text you wish to decrypt: ");
    fgets(buff, sizeof(buff), stdin);
    printf("\nEnter your encryption shift value (anything from +-1 to 25): "); 
   scanf ("%i", &shift_value);

    {
while ( buff[i] != '\0' ) 
     {
   buff[i] = buff[i] - shift_value;
   i++;
     }
    }
printf("\nYour decrypted text is: %s \n", buff);
}
int main ( ) {
   int choice;
    while ( (choice=getchoice()) != 3 ) {
       if ( choice == 1 ) {

           encode();
       } else
       if ( choice == 2 ) {
           decode();
       }
   }


   return 0;
}


ктонебут могет памо4 стобе етат код на4ел работат ..сто туда нада дабавит??могете пагалуста изменит иво стобе он стал прабелна работат ато  болще не магу с ним вази4а...илиге билагет код катори делагет тоге самаге ...вот то сто  на падобе иво гиа написал ету праграму ..мне толка нугна на c а не на каком другом гиазике гиа написал иво и на паскале но не как не мог  паменат иво на c 
на java тоге гест вот все коди...
помащ нугна толка на c!!!!!!!!!!!!

code on c++
Код

#include "stdafx.h"

void encode(char *input, char *output, int start); // шифрование
void decode(char *input, char *output, int start); // расшифровка

int main(int argc, char* argv[])
{
  setlocale(LC_ALL, "rus"); // определить кодовую страницу для России
  if (argc!=5) {  // задано недостаточное количество параметров командной строки
    cout << "Образец запуска: ";
    cout << "cezar_ascii.exe   encode/decode offset ";
    cout << "input_file - имя входного файла ";
    cout << "output_file - имя выходного файла ";
    cout << "encode - зашифровать ";
    cout << "decode - расшифровать ";
    cout << "offset - величина смещения алфавита замены ";
    exit(1);
  }
    
  for (unsigned int i=0; i
    if (!isdigit(argv[4][i])) {
      cout << "Величина смещения алфавита должна быть числом ";
      exit(1);
    }
  }
  
  if (toupper(*argv[3])=='E') {  // 3-им параметром в командной строке задано Encode - зашифровываем
    encode(argv[1], argv[2], atoi(argv[4]));
  } else { // иначе расшифровываем
    decode(argv[1], argv[2], atoi(argv[4]));  
  }

  return 0;
}

// шифрование
void encode(char *input,   // имя входного файла
      char *output,  // имя выходного файла
      int start) {   // величина смещения алфавита
  
  ifstream in(input, ios::in | ios::binary);
  ofstream out(output, ios::out | ios::binary);
  try {
    if (!in) {
      cerr << "Не могу открыть входной файл. ";
      exit(1);
    }
    if (!out) {
      cerr << "Не могу открыть выходной файл. ";
      in.close();
      exit(1);
    }

    int ch;  // для хранения считываемого символа
    do {
      ch = in.get();  // считываем из файла очередной символ
      if (!in.eof()) {  // признак конца файла не обрабатываем
        ch += start; // производим сдвиг на заданную величину по таблице кодов ASCII
        if (ch>255) {
          ch -= 255; // сдвиг циклический
        }
        out.put((char) ch);  // записать измененный символ в файл результата
      }
    } while (!in.eof());
  } catch (char *errMess) {  // если ошибка
      cerr << errMess << endl;
      if (in) {
        in.close();
      }
      if (out) {
        out.close();
      }
  }
  // закрыть используемые файлы
  if (in) {
    in.close();
  }
  if (out) {
    out.close();
  }
}

// расшифровка
void decode(char *input, char *output, int start) {
  
  ifstream in(input, ios::in | ios::binary);
  ofstream out(output, ios::out | ios::binary);
  try {
    if (!in) {
      cerr << "Не могу открыть входной файл. ";
      exit(1);
    }
    if (!out) {
      cerr << "Не могу открыть выходной файл. ";
      in.close();
      exit(1);
    }

    int ch;  // для хранения считываемого символа
    do {
      ch = in.get();
      if (!in.eof()) {  // признак конца файла не обрабатываем
        ch -= start; // производим циклический сдвиг на заданную величину в обратном направлении
        if (ch<0) {
          ch += 255;
        }
        out.put((char) ch);
      }
    } while (!in.eof());
  } catch (char *errMess) {
      cerr << errMess << endl;  // вывести сообщение об ошибке
      if (in) {
        in.close();
      }
      if (out) {
        out.close();
      }
  }

// закрыть рание открытые файлы
  if (in) {
    in.close();
  }
  if (out) {
    out.close();
  }
}

pascal
Код

program shfrovalka;
uses crt;
  var text:string;
  m,k,c,men:integer;
procedure cez(var text:string; var k:integer);
  begin
  clrscr;
   writeln('vvedite isxodniy text ');
    write('$~/> ');
    read(text);
   write('vvedite klu4 shifrovani9 ');
    readln(k);
   for m:=1 to length(text) do
    begin
     c:=ord(text[m])+k;
     if c>256 then c:=c-256;
     text[m]:=chr(c);
    end;
end;
procedure desh (var text:string);
  begin
   writeln('vvedite kluch deshifrovki' );
   readln(k);
    for m:=1 to length(text) do
     begin
      c:=ord(text[m])-k;
       if c<256 then c:=c+256;
      text[m]:=chr(c);
     end;
  end;
begin
  repeat
    clrscr;
    writeln('1 - shifrovka ');
    writeln('2 - deshifrovka ');
    writeln('3 - sosto9nie texta ');
    readln(men);
     case men of
      1:cez(text,k);
      2:desh(text); U?
      3:begin
         writeln(text);
         readkey;
        end;
     end;
  until men = 0;
end.


Код

1.1. Шифр Цезаря

Шифр Цезаря основан на фиксированном смещении по кругу букв алфавита. Буквы сдвигаются по кругу, так что после последней буквы алфавита идет его первая буква. В следующем листинге (на языке java) приводится алгоритм шифрования на основе шифра Цезаря.

Листинг 1. класс CaesarCipher

package ru.festu.u031.asanov.security.ref1;

public class CaesarCipher {

    /** Зашифровать строку */

    public static String encrypt(String s, int key) {

        String result = "";

        for(int i = 0; i < s.length(); i++) {

            // зашифровать каждый символ в строке

            result += encrypt(s.charAt(i), key);

        }

        return result;

    }

    /** Зашифровать отдельный символ */

    public static char encrypt(char c, int key) {

        // преобразовать строчные буквы в прописные

        if(c >= 'а' && c <= 'я') c = Character.toUpperCase(c);

        // "повертуть" букву

        if(c >= 'А' && c <= 'Я') c = rotate(c, key);

        return c;

    }

    /** Расшифровать строку */

    public static String decrypt(String s, int key) {

        // выполнить шифрование с "обратным" ключем

        return encrypt(s, -key);

    }

    /** Расшифровать отдельный символ */

    public static char decrypt(char c, int key) {

        if(c < 'А' || c > 'Я') return c;

        else return rotate(c, key);

    }

    /** "Поворот" символа */

    private static char rotate(char c, int key) {

        int l = 'Я' - 'А';

        c += key % l;

        if(c < 'А') c += l;

        if(c > 'Я') c -= l;

        return c;

    }

}


Это сообщение отредактировал(а) BISKOT188 - 22.11.2008, 22:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0603 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.