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

Не могу разобраться! - C++

Войти
Регистрация
Восстановить пароль
 
tata_rochka90
 Аватар для tata_rochka90
0 / 0 / 0
Регистрация: 29.07.2009
Сообщений: 28
12.03.2010, 08:32     Не могу разобраться! #1
кто нибудь помогите пожалуйста разобраться в этом коде:
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
ulong s_matrix(ulong64 v)
{
    static ulong    s1[] = {
                14 << 28,  4 << 28, 13 << 28,  1 << 28,  2 << 28, 15 << 28, 11 << 28,  8 << 28,  3 << 28, 10 << 28,  6 << 28, 12 << 28,  5 << 28,  9 << 28,  0 << 28,  7 << 28,
                 0 << 28, 15 << 28,  7 << 28,  4 << 28, 14 << 28,  2 << 28, 13 << 28,  1 << 28, 10 << 28,  6 << 28, 12 << 28, 11 << 28,  9 << 28,  5 << 28,  3 << 28,  8 << 28,
                 4 << 28,  1 << 28, 14 << 28,  8 << 28, 13 << 28,  6 << 28,  2 << 28, 11 << 28, 15 << 28, 12 << 28,  9 << 28,  7 << 28,  3 << 28, 10 << 28,  5 << 28,  0 << 28,
                15 << 28, 12 << 28,  8 << 28,  2 << 28,  4 << 28,  9 << 28,  1 << 28,  7 << 28,  5 << 28, 11 << 28,  3 << 28, 14 << 28, 10 << 28,  0 << 28,  6 << 28, 13 << 28
            };
    static ulong    s2[] = {
                15 << 24,  1 << 24,  8 << 24, 14 << 24,  6 << 24, 11 << 24,  3 << 24,  4 << 24,  9 << 24,  7 << 24,  2 << 24, 13 << 24, 12 << 24,  0 << 24,  5 << 24, 10 << 24,
                 3 << 24, 13 << 24,  4 << 24,  7 << 24, 15 << 24,  2 << 24,  8 << 24, 14 << 24, 12 << 24,  0 << 24,  1 << 24, 10 << 24,  6 << 24,  9 << 24, 11 << 24,  5 << 24,
                 0 << 24, 14 << 24,  7 << 24, 11 << 24, 10 << 24,  4 << 24, 13 << 24,  1 << 24,  5 << 24,  8 << 24, 12 << 24,  6 << 24,  9 << 24,  3 << 24,  2 << 24, 15 << 24,
                13 << 24,  8 << 24, 10 << 24,  1 << 24,  3 << 24, 15 << 24,  4 << 24,  2 << 24, 11 << 24,  6 << 24,  7 << 24, 12 << 24,  0 << 24,  5 << 24, 14 << 24,  9 << 24
            };
    static ulong    s3[] = {
                10 << 20,  0 << 20,  9 << 20, 14 << 20,  6 << 20,  3 << 20, 15 << 20,  5 << 20,  1 << 20, 13 << 20, 12 << 20,  7 << 20, 11 << 20,  4 << 20,  2 << 20,  8 << 20,
                13 << 20,  7 << 20,  0 << 20,  9 << 20,  3 << 20,  4 << 20,  6 << 20, 10 << 20,  2 << 20,  8 << 20,  5 << 20, 14 << 20, 12 << 20, 11 << 20, 15 << 20,  1 << 20,
                13 << 20,  6 << 20,  4 << 20,  9 << 20,  8 << 20, 15 << 20,  3 << 20,  0 << 20, 11 << 20,  1 << 20,  2 << 20, 12 << 20,  5 << 20, 10 << 20, 14 << 20,  7 << 20,
                 1 << 20, 10 << 20, 13 << 20,  0 << 20,  6 << 20,  9 << 20,  8 << 20,  7 << 20,  4 << 20, 15 << 20, 14 << 20,  3 << 20, 11 << 20,  5 << 20,  2 << 20, 12 << 20
            };
    static ulong    s4[] = {
                 7 << 16, 13 << 16, 14 << 16,  3 << 16,  0 << 16,  6 << 16,  9 << 16, 10 << 16,  1 << 16,  2 << 16,  8 << 16,  5 << 16, 11 << 16, 12 << 16,  4 << 16, 15 << 16,
                13 << 16,  8 << 16, 11 << 16,  5 << 16,  6 << 16, 15 << 16,  0 << 16,  3 << 16,  4 << 16,  7 << 16,  2 << 16, 12 << 16,  1 << 16, 10 << 16, 14 << 16,  9 << 16,
                10 << 16,  6 << 16,  9 << 16,  0 << 16, 12 << 16, 11 << 16,  7 << 16, 13 << 16, 15 << 16,  1 << 16,  3 << 16, 14 << 16,  5 << 16,  2 << 16,  8 << 16,  4 << 16,
                 3 << 16, 15 << 16,  0 << 16,  6 << 16, 10 << 16,  1 << 16, 13 << 16,  8 << 16,  9 << 16,  4 << 16,  5 << 16, 11 << 16, 12 << 16,  7 << 16,  2 << 16, 14 << 16
            };
    static ulong    s5[] = {
                 2 << 12, 12 << 12,  4 << 12,  1 << 12,  7 << 12, 10 << 12, 11 << 12,  6 << 12,  8 << 12,  5 << 12,  3 << 12, 15 << 12, 13 << 12,  0 << 12, 14 << 12,  9 << 12,
                14 << 12, 11 << 12,  2 << 12, 12 << 12,  4 << 12,  7 << 12, 13 << 12,  1 << 12,  5 << 12,  0 << 12, 15 << 12, 10 << 12,  3 << 12,  9 << 12,  8 << 12,  6 << 12,
                 4 << 12,  2 << 12,  1 << 12, 11 << 12, 10 << 12, 13 << 12,  7 << 12,  8 << 12, 15 << 12,  9 << 12, 12 << 12,  5 << 12,  6 << 12,  3 << 12,  0 << 12, 14 << 12,
                11 << 12,  8 << 12, 12 << 12,  7 << 12,  1 << 12, 14 << 12,  2 << 12, 13 << 12,  6 << 12, 15 << 12,  0 << 12,  9 << 12, 10 << 12,  4 << 12,  5 << 12,  3 << 12
            };
    static ulong    s6[] = {
                12 << 8,  1 << 8, 10 << 8, 15 << 8,  9 << 8,  2 << 8,  6 << 8,  8 << 8,  0 << 8, 13 << 8,  3 << 8,  4 << 8, 14 << 8,  7 << 8,  5 << 8, 11 << 8,
                10 << 8, 15 << 8,  4 << 8,  2 << 8,  7 << 8, 12 << 8,  9 << 8,  5 << 8,  6 << 8,  1 << 8, 13 << 8, 14 << 8,  0 << 8, 11 << 8,  3 << 8,  8 << 8,
                 9 << 8, 14 << 8, 15 << 8,  5 << 8,  2 << 8,  8 << 8, 12 << 8,  3 << 8,  7 << 8,  0 << 8,  4 << 8, 10 << 8,  1 << 8, 13 << 8, 11 << 8,  6 << 8,
                 4 << 8,  3 << 8,  2 << 8, 12 << 8,  9 << 8,  5 << 8, 15 << 8, 10 << 8, 11 << 8, 14 << 8,  1 << 8,  7 << 8,  6 << 8,  0 << 8,  8 << 8, 13 << 8
            };
    static ulong    s7[] = {
                 4 << 4, 11 << 4,  2 << 4, 14 << 4, 15 << 4,  0 << 4,  8 << 4, 13 << 4,  3 << 4, 12 << 4,  9 << 4,  7 << 4,  5 << 4, 10 << 4,  6 << 4,  1 << 4,
                13 << 4,  0 << 4, 11 << 4,  7 << 4,  4 << 4,  9 << 4,  1 << 4, 10 << 4, 14 << 4,  3 << 4,  5 << 4, 12 << 4,  2 << 4, 15 << 4,  8 << 4,  6 << 4,
                 1 << 4,  4 << 4, 11 << 4, 13 << 4, 12 << 4,  3 << 4,  7 << 4, 14 << 4, 10 << 4, 15 << 4,  6 << 4,  8 << 4,  0 << 4,  5 << 4,  9 << 4,  2 << 4,
                 6 << 4, 11 << 4, 13 << 4,  8 << 4,  1 << 4,  4 << 4, 10 << 4,  7 << 4,  9 << 4,  5 << 4,  0 << 4, 15 << 4, 14 << 4,  2 << 4,  3 << 4, 12 << 4
            };
    static ulong    s8[] = {
                13,  2,  8,  4,  6, 15, 11,  1, 10,  9,  3, 14,  5,  0, 12,  7,
                 1, 15, 13,  8, 10,  3,  7,  4, 12,  5,  6, 11,  0, 14,  9,  2,
                 7, 11,  4,  1,  9, 12, 14,  2,  0,  6, 10, 13, 15,  3,  5,  8,
                 2,  1, 14,  7,  4, 10,  8, 13, 15, 12,  9,  0,  3,  5,  6, 11
            };
 
    v.h <<= 2;
    v.h |= (v.l >> 30);
 
    return
        s1[(((v.h >> 12) & 0x20) | ((v.h >>  8) & 0x10)) + ((v.h >> 13) & 0xF)] +
        s2[(((v.h >>  6) & 0x20) | ((v.h >>  2) & 0x10)) + ((v.h >>  7) & 0xF)] +
        s3[(((v.h      ) & 0x20) | ((v.h <<  4) & 0x10)) + ((v.h >>  1) & 0xF)] +
        s4[(((v.l >> 24) & 0x20) | ((v.l >> 20) & 0x10)) + ((v.l >> 25) & 0xF)] +
        s5[(((v.l >> 18) & 0x20) | ((v.l >> 14) & 0x10)) + ((v.l >> 19) & 0xF)] +
        s6[(((v.l >> 12) & 0x20) | ((v.l >>  8) & 0x10)) + ((v.l >> 13) & 0xF)] +
        s7[(((v.l >>  6) & 0x20) | ((v.l >>  2) & 0x10)) + ((v.l >>  7) & 0xF)] +
        s8[(((v.l      ) & 0x20) | ((v.l <<  4) & 0x10)) + ((v.l >>  1) & 0xF)];
}
это s-блок, алгоритма шифрования DES. вот его словесный алгоритм
Функции преобразования S1, S2, ..., S8
Код
	

		  Номер столбца
  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

	

 Н
 о
 м
 е
 р

 с
 т
 р
 о
 к
 и

	

 0
 1
 2
 3

	

 14  4 13  1  2 15 11  8  3 10  6 12  5  9  0  7
  0 15  7  4 14  2 13  1 10  6 12 11  9  5  3  8
  4  1 14  8 13  6  2 11 15 12  9  7  3 10  5  0
 15 12  8  2  4  9  1  7  5 11  3 14 10  0  6 13

	

 S1 

 0
 1
 2
 3

	

 15  1  8 14  6 11  3  4  9  7  2 13 12  0  5 10
  3 13  4  7 15  2  8 14 12  0  1 10  6  9 11  5
  0 14  7 11 10  4 13  1  5  8 12  6  9  3  2 15
 13  8 10  1  3 15  4  2 11  6  7 12  0  5 14  9

	

 S2 

 0
 1
 2
 3

	

 10  0  9 14  6  3 15  5  1 13 12  7 11  4  2  8
 13  7  0  9  3  4  6 10  2  8  5 14 12 11 15  1
 13  6  4  9  8 15  3  0 11  1  2 12  5 10 14  7
  1 10 13  0  6  9  8  7  4 15 14  3 11  5  2 12

	

 S3 

 0
 1
 2
 3

	

  7 13 14  3  0  6  9 10  1  2  8  5 11 12  4 15
 13  8 11  5  6 15  0  3  4  7  2 12  1 10 14  9
 10  6  9  0 12 11  7 13 15  1  3 14  5  2  8  4
  3 15  0  6 10  1 13  8  9  4  5 11 12  7  2 14

	

 S4 

 0
 1
 2
 3

	

  2 12  4  1  7 10 11  6  8  5  3 15 13  0 14  9
 14 11  2 12  4  7 13  1  5  0 15 10  3  9  8  6
  4  2  1 11 10 13  7  8 15  9 12  5  6  3  0 14
 11  8 12  7  1 14  2 13  6 15  0  9 10  4  5  3

	

 S5 

 0
 1
 2
 3

	

  12  1 10 15  9  2  6  8  0 13  3  4 14  7  5 11
 10 15  4  2  7 12  9  5  6  1 13 14  0 11  3  8
  9 14 15  5  2  8 12  3  7  0  4 10  1 13 11  6
  4  3  2 12  9  5 15 10 11 14  1  7  6  0  8 13

	

 S6 

 0
 1
 2
 3

	

  4 11  2 14 15  0  8 13  3 12  9  7  5 10  6  1
 13  0 11  7  4  9  1 10 14  3  5 12  2 15  8  6
  1  4 11 13 12  3  7 14 10 15  6  8  0  5  9  2
  6 11 13  8  1  4 10  7  9  5  0 15 14  2  3 12

	

 S7 

 0
 1
 2
 3

	

 13  2  8  4  6 15 11  1 10  9  3 14  5  0 12  7
  1 15 13  8 10  3  7  4 12  5  6 11  0 14  9  2
  7 11  4  1  9 12 14  2  0  6 10 13 15  3  5  8
  2  1 14  7  4 10  8 13 15 12  9  0  3  5  6 11

	

 S8
К табл.4. требуются дополнительные пояснения. Пусть на вход функции-матрицы Sj поступает 6-битовый блок B(j) = b1b2b3b4b5b6, тогда двухбитовое число b1b6 указывает номер строки матрицы, а b2b3b4b5 - номер столбца. Результатом Sj(B(j)) будет 4-битовый элемент, расположенный на пересечении указанных строки и столбца.

Например, В(1)=011011. Тогда S1(В(1)) расположен на пересечении строки 1 и столбца 13. В столбце 13 строки 1 задано значение 5. Значит, S1(011011)=0101.

Применив операцию выбора к каждому из 6-битовых блоков B(1), B(2), ..., B(8), получаем 32-битовую последовательность S1(B(1))S2(B(2))S3(B(3))...S8(B(8)).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2010, 08:32     Не могу разобраться!
Посмотрите здесь:

C++ Не могу разобраться с класами
Не могу разобраться с задачками C++
C++ Не могу разобраться с указателями
С циклом for не могу разобраться C++
C++ Не могу разобраться с qmake
C++ Не могу разобраться с ООП
Не могу разобраться в vector<> C++
C++ Не могу разобраться с алгоритмом
C++ Не могу разобраться с кодом
C++ Табуляция, не могу разобраться
Не могу разобраться с циклом C++
C++ Не могу разобраться с циклом

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 20:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru