| Код |
#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
|