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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Криптоанализ шифра Виженера, криптпоанализ методом Казиски 
:(
    Опции темы
san4esf
Дата 26.1.2010, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



помогите разобраться))при компиляции выводится 20 ошибок (( или скиньте укого есть похожая программа!!!в долгу не останусь)))
// Kaziski.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "unidef.h"


//int _tmain(int argc, _TCHAR* argv[])
//{
//    return 0;
//}
// биграммы
typedef struct 
{
long values[40][40];
long total;
}
BIGRAMM;
#include "etalon.h"
BIGRAMM current;

// использованный алфавит (укороченный в целях упрощения)
// «а» маленькое играет роль пробела и заменителя всех остальных знаков
unsigned char alpha[33] = {'А','Б','В','Г','Д','Е','Ж','З','И','Й','К','Л',
                           'М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь',
                           'Э','Ю','Я','а'};

// ключ-таблица для зашифрования
unsigned char key[33] = {'Б','В','Г','Д','Е','Ж','З','И','Й','К','Л','М','Н',
                         'О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э',
                         'Ю','Я','а','А'};
// ключ-таблица для расшифрования
unsigned char right_unkey[33] = {'Я','а','А','Б','В','Г','Д','Е','Ж','З','И',
                                 'Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч',
                                 'Ш','Щ',
                                 'Ъ','Ы','Ь','Э','Ю'};
unsigned char unkey[33] = {'Е','П','Р','С','Т','Я','а','А','Б','В','Г','Д','Ж','З',
                           'И','Й','К','Л','М','Н','О','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ',
                           'Ы','Ь','Э','Ю'};

// шифр простой замены
void encrypt(unsigned char *buf, int len, char *key) {
for (int i = 0; i < len; i++)
if (buf[i] >= 0xC0 && buf[i] <= 0xE0) buf[i] = key[buf[i]-0xC0];
}

void decrypt(unsigned char *buf, int len, char *key) {
for (int i = 0; i < len; i++)
if (buf[i] >= 0xC0 && buf[i] <= 0xE0) buf[i] = unkey[buf[i]-0xC0];
}

// вычисляем биграммы
void calc_gramm(unsigned char *buf, int len) {
for (int i = 0; i < len-1; i++) {
current.values[ buf[i]-0xC0 ][ buf[i+1]-0xC0 ]++;
current.total++;
}
}
// вычисляем «расстояние» рабочего ключа до настоящего
double calc_measure() 
{
double result = 0;

if (!current.total) current.total++;
for (int i = 0; i < 40; i++)
for (int j = 0; j < 40; j++)
result += fabs(((double) current.values[i][j]/current.total) -
((double) etalon.values[i][j]/etalon.total));

return result;
}

// поиск ключа
void findkey_jakobsen(char *buf, int len, char *guesskey) {
char work_key[33];
double V, V_;
int c, pos, sym;
char *temp, s;

temp = (char *) malloc(len);
memcpy(work_key, guesskey, sizeof(work_key));
strncpy(temp, buf, len);
memset(&current, 0, sizeof(current));
calc_gramm(temp, len);
V = calc_measure();
randomize();
c = 0;
for (;;) {
// переставляем символы в ключе
pos = rand() % 33;
sym = (pos + 1 + rand()) % 33;
s = work_key[pos];
work_key[pos] = work_key[sym];
work_key[sym] = s;

// дешифруем текст
strncpy(temp, buf, len);
decrypt(temp, len, work_key);
memset(&current, 0, sizeof(current));
calc_gramm(temp, len);

// считаем расстояние до эталона
V_ = calc_measure();
if (++c % 1000 == 0) printf("%f < %f, %d, %d\n", V_, V, pos, sym);
if (V_ < V) {
// ура! улучшили результат!
printf("WORK_KEY == %s, KEY = %s (V == %f, V_ == %f)",
work_key, guesskey, V, V_);
printf("!!!\n", work_key);
memcpy(guesskey, work_key, sizeof(work_key));
V = V_;
}
else
// оставляем все без изменений
memcpy(work_key, guesskey, sizeof(work_key));
}
printf("%f", V);
}

#define MAKE_ETALON 0
int main(int argc, char* argv[])
{
char text[] = "САМ АЛГОРИТМ СОСТОИТ ИЗ НЕСКОЛЬКИХ ШАГОВ, ПОВТОРЯЕМЫХ В"
"КАЖДОЙ ИТЕРАЦИИ ПОСЛЕДОВАТЕЛЬНО, ОДИН ЗА ДРУГИМ. СНАЧАЛА РАБОЧИЙ КЛЮЧ"
"МОДИФИЦИРУЕТСЯ СЛУЧАЙНЫМ ИЛИ ЗАРАНЕЕ ОПРЕДЕЛЕННЫМ СПОСОБОМ, В"
"ЗАВИСИМОСТИ ОТ КОЛИЧЕСТВА И УСПЕХА ПРОШЛЫХ ИТЕРАЦИЙ (КОРРЕКТНОСТЬ"
"ЭТОГО ОПИСАНИЯ МЫ ОБСУДИМ ЧУТЬ ПОЗЖЕ). ЗАТЕМ ШИФРОТЕКСТ"
"РАСШИФРОВЫВАЕТСЯ С ПОМОЩЬЮ НОВОГО МОДИФИЦИРОВАННОГО КЛЮЧА И"
"ПРОВЕРЯЕТСЯ ЗНАЧЕНИЕ НОРМИРОВАННОЙ ЦЕЛЕВОЙ ФУНКЦИИ. ЕСЛИ ОНО БЛИЖЕ"
"К ЕДИНИЦЕ (ИЗ-ЗА НОРМИРОВАННОСТИ), ЧЕМ ВЫЧИСЛЕННОЕ ВО ВРЕМЯ ПРОШЛОЙ"
"ИТЕРАЦИИ АЛГОРИТМА, ТО ИЗМЕНЕННЫЙ КЛЮЧ СОХРАНЯЕТСЯ В КАЧЕСТВЕ"
"РАБОЧЕГО И АЛГОРИТМ ПОВТОРЯЕТСЯ.";
int len = strlen(text);
for (int i = 0; i < len; i++)
if (text[i] < 'А' || text[i] > 'Я') text[i] = 0xE0;

// создание эталона
if (MAKE_ETALON) {
FILE *f = fopen("collect.txt", "rb");
char buf[32768];
while (!feof(f)) {
int r = fread(buf, 1, sizeof(buf), f);
for (int i = 0; i < r; i++) if (buf[i] < 'А' || buf[i] > 'Я')
buf[i] = 0xE0;
calc_gramm(buf, r);
}
fclose(f);
f = fopen("etalon.h", "wt");
fprintf(f, "BIGRAMM etalon = {\n");
for (int i = 0; i < 40; i++) {
for (int j = 0; j < 40; j++)
fprintf(f, "%d ", current.values[i][j]);
fprintf(f, "\n");
}
fprintf(f, "%d };\n", current.total);
fclose(f);
return 0;
}

encrypt(text, len, key);
printf("%s\n", text);

findkey_jakobsen(text, len, unkey);

decrypt(text, len, unkey);
printf("%s\n", text);

return 0;
}
ошибки
Error    1    error C2065: 'etalon' : undeclared identifier    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    68    
Error    2    error C2228: left of '.values' must have class/struct/union    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    68    
Error    3    error C2228: left of '.total' must have class/struct/union    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    68    
Error    4    error C3861: 'fabs': identifier not found    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    67    
Error    5    error C3861: 'malloc': identifier not found    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    80    
Error    6    error C3861: 'strncpy': identifier not found    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    82    
Error    7    error C3861: 'memset': identifier not found    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    83    
Error    8    error C2664: 'calc_gramm' : cannot convert parameter 1 from 'char *' to 'unsigned char *'    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    84    
Error    9    error C3861: 'randomize': identifier not found    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    86    
Error    10    error C3861: 'rand': identifier not found    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    90    
Error    11    error C3861: 'rand': identifier not found    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    91    
Error    12    error C3861: 'strncpy': identifier not found    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    97    
Error    13    error C2664: 'decrypt' : cannot convert parameter 1 from 'char *' to 'unsigned char *'    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    98    
Error    14    error C3861: 'memset': identifier not found    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    99    
Error    15    error C2664: 'calc_gramm' : cannot convert parameter 1 from 'char *' to 'unsigned char *'    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    100    
Error    16    error C3861: 'strlen': identifier not found    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    133    
Warning    17    warning C4309: '=' : truncation of constant value    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    135    
Warning    18    warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    142    
Warning    19    warning C4309: '=' : truncation of constant value    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    144    
Error    20    error C2664: 'calc_gramm' : cannot convert parameter 1 from 'char [32768]' to 'unsigned char *'    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    145    
Error    21    error C2664: 'encrypt' : cannot convert parameter 1 from 'char [591]' to 'unsigned char *'    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    160    
Error    22    error C2664: 'findkey_jakobsen' : cannot convert parameter 3 from 'unsigned char [33]' to 'char *'    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    163    
Error    23    error C2664: 'decrypt' : cannot convert parameter 1 from 'char [591]' to 'unsigned char *'    c:\documents and settings\админ\мои документы\visual studio 2005\projects\kaziski\kaziski\kaziski.cpp    165    

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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