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

un XOR без ключа - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка информации из базы данных http://www.cyberforum.ru/cpp-beginners/thread311283.html
Вот функция вывода из файла: void Open() { Abbase z3; system ("cls"); cout<<"Abbase 0.36 beta 3\n"<<endl; cout<<"Таблица все внесенных абитуриентов\n"<<endl; ifstream fin("base.txt"); if (!fin) cout <<"База пуста!\n";
C++ Последовательность Дана последовательность целых чисел, за которой следует 0. Найти количество элементов этой последовательности, кратных ее первому элементу.Решить, используя основные операторы языка С++. При решении задачи, использовать все типы циклов (for, while, do while). http://www.cyberforum.ru/cpp-beginners/thread311256.html
C++ метод половинного деления
дана f(x). дан отрезок на котором расположены положительные корни дана точность E могу написать функцию, для нахождения одного корня на этом отрезке, а надо найти все. использовать нужно метод половинного деления. вот как выглядит эта функция Код C++ int g(int a, int b, double E){
Задаачка C++
Составить программу.Дан порядковый номер дня месяца, вывести на экран количество дней оставшихся до конца месяца...Знаю,задача простая но я незнаю как её делать...=(
C++ Показ на экране движения планет по орбите http://www.cyberforum.ru/cpp-beginners/thread311242.html
Собственно нужна прога которая будет показывать на экране движения планет по арбите или что то подобное.
C++ ошибка при компиляции и новый проект создавал,все равно не компилиться подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
26.08.2011, 13:42     un XOR без ключа
Цитата Сообщение от AzaKendler Посмотреть сообщение
надо просто искать повторы если они есть
Именно по смещению ключа, потому что разные символы открытого текста могут дать одинаковые символы в шифротексте, так как шифруются на разных символах ключа. (Слово "символ" в данном контексте условно).

Сейчас я попробую вкратце описать подобный "криптоанализ" :)
Допустим имеется открытый исходный текст:
Код
арозаупаланалапуазора
Допустим мы имеем ключ длиной в два символа (для простоты примера). В принципе нам не важно какой именно ключ и какой шифротекст будет после преобразования. Важно то, что определенные символызашифруются с повторами. Разобьем открытый текст на части, длины которых равны длине ключа.
Код
1     1   2  2  2  2    1     2
ар оз ау па ла на ла пу аз ор а
Цифрами отмечены те символы, которые в шифротексте будут одинаковыми. Хоть это и одна и та же буква. В шифротексте символ "а", помеченный 1-цей, будет отличаться от символа "а", помеченного 2-кой.

Таким образом, мы видим в каких местах текста стоят одинаковые символы. Исходя из анализа встречаемости символов в каком-либо языке и самых встречаемых в шифротексте можно получить открытый текст.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
 
int main() {
    unsigned char buf[BUFSIZ] = "арозаупаланалапуазора";
    unsigned char key[BUFSIZ] = { 10, 45 };
    int i, j, keylen = strlen(key), buflen = strlen(buf);
 
    for (i = 0; i < buflen; i += keylen) {
        for (j = 0; j < keylen; ++j) {
            buf[i + j] ^= key[j];
        }
    }
 
    for (i = 0; i < buflen; ++i) {
        printf("%#2X%s", buf[i], (i + 1) % 2 ? " " : "\n");
    }
 
    return 0;
}
Код
0XDA 0X9D
0XDB 0XAD
0XDA 0X93
0XDA 0X9A
0XDA 0X9D
0XDB 0XAE
0XDA 0X92
0XDA 0X9D
0XDA 0X96
0XDA 0X9D
0XDA 0X90
0XDA 0X9D
0XDA 0X96
0XDA 0X9D
0XDA 0X92
0XDB 0XAE
0XDA 0X9D
0XDA 0X9A
0XDA 0X93
0XDB 0XAD
0XDA 0X9D
Посмотрите сколько значений 0xDA в первом стлбце и 0x9D во втором столбце - это все символы "а" в открытом тексте.
 
Текущее время: 12:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru