Форум программистов, компьютерный форум CyberForum.ru

Взлом XOR шифра - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шаблон функции сравнения для qsort() http://www.cyberforum.ru/cpp-beginners/thread854889.html
Хочу отсортировать массив из int и из double с помощью qsort(). Для этого необходимо определить функцию сравнения элементов. Думал попробовать сделать шаблон такой функции. template <class T> int comp(const T *a,const T *b) { // return *(double *)a - *(double *)b; if (*(T *)a < *(T *)b) return -1; else if (*(T *)a > *(T *)b)
C++ Не работает признак окончания ввода(признак-0) Признак окончания ввода 0; подскажите люди добрые что не так?) #include <iostream> #include<stdio.h> using namespace std; int main(){ setlocale(LC_ALL, "Russian"); int const n=1000; int arr; int i=0,count=0,countr=0; cout<<"Введите последовательность чисел: "; http://www.cyberforum.ru/cpp-beginners/thread854873.html
Добавить числа из файла C++
Суть задания : создать файл, записать туда 10 рандомных чисел, закрыть файл, открыть файл, взять оттуда числа и посчитать их сумму. Проблема собсно в том, что считаю я аски кода этих чисел, а не сами числа. Прилагаю код, он немного криво написано, но уж извиняйте : #include <vcl.h> #include <iostream.h> #include <conio.h> #include <iomanip.h> #include <fstream> using namespace std; int...
CAsyncSocket C++
Доброго времени суток. При написании программы возникла проблема с CAsyncSocket. Нужно было реализовать передачу сообщений между диалоговым приложением и консолью (консоль - сервер), через динамически загружаемую библиотеку. Вот код библиотеки: struct Header { int size; int addr; }; struct Message { char *mes;
C++ Задача по численным методам http://www.cyberforum.ru/cpp-beginners/thread854832.html
помогите решить задачу
C++ Передача операнда внутри переопределенной операции Здравствуйте. Пытаюсь разобраться с перегрузкой операций для классов, и вот в чем проблема: Есть класс longNumber, в котором хранится(внезапно) длинное число в виде массива цифр а также знак числа. Переопределил для класса операцию "+". Теперь учу её работать с отрицательными числами. Например если первое число положительное, а второе - отрицательное, то значения нужно уже вычитать. Собственно,... подробнее

Показать сообщение отдельно
Rad-X
0 / 0 / 0
Регистрация: 03.05.2013
Сообщений: 14
03.05.2013, 19:17  [ТС]     Взлом XOR шифра
Цитата Сообщение от Nick Alte Посмотреть сообщение
Ну... Приведу пример. Состоящее из 11 букв слово АБРАКАДАБРА со смещением 2
Ну там же написано сместить и ксорить. Вот я сместил строку, отксорил с исходной, и считаю совпадения ксоровской с исходной строкой, ведь так?

У меня строка длинной около 500 символов и после той процедуры которую я описал выше, для всех 500-та смещений получается одинаковый индекс совпадений - 5,4%

вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
void encryptnokey()
{
    FILE *in,*out,*key;
    fopen_s(&in,"out.txt","rb");
    fopen_s(&out,"encryptnotkey.txt","wb");
    char textorg[20000],text[20000];
    int lenorg=0,len=0;
    
    while(!(feof(in)))  //считываем из файла и удаляем все лишние символы кроме русских
    {    unsigned char c;
        c=fgetc(in);
        textorg[lenorg]=c;
        if ((c>191)&&(c<256)) {text[len]=c;len++;}
        lenorg++;
        if (feof(in)) break;
    }
 
    len--;
    lenorg--;
 
    int det=0,all=0;
    double max=0;
    
  srand(time(0));
 
    for(int i=0;i<len/2;i++)
    {
        int ind[32],indxr[32];
    double indsum=0;
 
        for(int j=0;j<32;j++)
        {
        ind[j]=0;
        indxr[j]=0;
        }
 
 
        for(int j=0;j<(len);j++)
        {
            unsigned char c,k,xr;
 
            c=text[i];
            k=text[(j+i)%len];
        //    k=text[rand()%len];   
            int reg=2;
            
            if ((c>191)&&(c<224)) {c-=192; reg=1;}  /*приводим все символы к одинаковому коду, учитывая заглавные*/
            if ((c>223)&&(c<256)) {c-=224; reg=0;}
 
            if ((k>191)&&(k<224)) {k-=192;}
            if ((k>223)&&(k<256)) {k-=224;}  
            
            xr=(c^k); //получаем отксоренный символ 
            
            if (c==xr) indsum++; //подсчитываем совпавшие символоы
            
            all++;
        
        }
 
 
        cout<<"Смещение "<<i<<". Индекс совпадений "<<(indsum/(len))<<"  "<<endl;
       
        
       det=0;
        all=0;
        indsum=0;
 
    }
 
 
}
Добавлено через 5 минут
Шифрую вот эту строку:
"Ниже описано, как взломать этот шифр:
1. Определим длину ключа с помощью процедуры, известной как подсчет совпадений. Применим операцию XOR к шифротексту, используя в качестве ключа сам шифротекст с различными смещениями, и подсчитаем совпадающие байты. Если величина смещения кратна длине ключа, то совпадет свыше 6 процентов байтов. Если нет, то будут совпадать меньше чем 0.4 процента (считая, что обычный ASCII текст кодируется случайным ключом, для других типов открытых текстов числа будут другими). Это называется показателем совпадений. Минимальное смещение от одного значения, кратного длине ключа, к другому и есть длина ключа."
Ключ:
"сложениепомодулюдва"
После ксора получаю:
"Ьгиг лвафпгв, ддщ йщпммсщт ычгъ эзъь:
1. Алгоъбйиэ пеоию восщм я лэзрэюю юыарайыхф, жлмбвщукл ксб бибьяаэ явмлупыйкй. Юыжкааай ббйюдега XOR о ъиеыафазщчь, жэбкшчщчэ в ылщгфяка еетщд влт ькфбеьгпьъ ф яолемджеик сэочгиечйз, ж гаавьццвеэ ъадкнмесчдл еувмя. Зсъг мгоеянво эвбкоумэ кбльле йгнвл жеъдл, мк уоудовая щзфцй 6 бфээыйроу копчгк. Аюед гбб, щр есдвщ яизвибпьр вбючжб хеэ 0.4 дюиуиечп (яыжцуф, йцм оррщлюд ASCII ъаеяю дкчгочзтаф янцъимвха дпньри, жло пюхжеэ чзбвм кббоярыд щлмфяжз шжэед тшъчр дбшнойе). Хчб гмйяслыцуя юеджвнъадла яксдюазнщв. Воиедедтбаб взыэзнщо аф лйелма лгддоумэ, кбльллож бджбл ошхйд, и дбшнийю а аюьр кпыжю ойюжл."
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru