Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 2
1

Скремблирование

18.10.2017, 22:36. Показов 1428. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста. Нужно разработать программу, реализующую работу скремблера и дескремблера согласно варианту. Исходными данными являются:
1) Длина сообщения (10-бит)
2) Последовательность байтов сообщения
Код неправильно работает, последовательность, которая на выходе, должна быть равна входящей. Наверное обратное преобразование неверно реализовано.
Xor производится по 2, 6 и 9 биту исходя из варианта задания.
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
#include <iostream>
#include <stdio.h>
#include <stdint.h>
 
typedef union{
 
 unsigned short sbyte;
 
struct
{
    unsigned b0: 1;
    unsigned b1: 1;
    unsigned b2: 1;
    unsigned b3: 1;
    unsigned b4: 1;
    unsigned b5: 1;
    unsigned b6: 1;
    unsigned b7: 1;
    unsigned b8: 1;
    unsigned b9: 1;
    unsigned b10: 1;
    unsigned b11: 1;
    unsigned b12: 1;
    unsigned b13: 1;
    unsigned b14: 1;
    unsigned b15: 1;
         };
} b16;
 
int main()
{
    unsigned short m[10] { 44, 62, 50, 60, 23, 16, 34, 60, 32 , 99};
    unsigned short vr_bite = 0;
    b16 inbyte;
    b16 in_sbit;
    b16 out_sbit;
    b16 outbyte;
 
 
    out_sbit.sbyte = 0;
    in_sbit.sbyte = 0;
 
    for ( int i = 0; i < 10; ++i ) {
        inbyte.sbyte = m[i];
        outbyte.sbyte=0;
 
        for ( int j = 0; j < 10; ++j) {
            in_sbit.sbyte <<= 1;
            in_sbit.b0 = inbyte.b9 ^ (in_sbit.b2 ^ in_sbit.b6 ^ in_sbit.b9);
            inbyte.sbyte <<= 1;
            printf("%x", in_sbit.b0);
           }
     printf(" Scremb(%d) = %x ", m[i], in_sbit.sbyte);
     vr_bite = in_sbit.sbyte;
 
     for ( int j = 0; j < 10; ++j) {
        out_sbit.sbyte <<= 1;
        out_sbit.b0 = in_sbit.b9;
 
 
        outbyte.sbyte <<= 1;
        outbyte.b0 = in_sbit.b9 ^ (out_sbit.b2 ^ out_sbit.b6 ^ out_sbit.b9);
        printf("%x", outbyte.b1);
        in_sbit.sbyte <<= 1; //сдвиг влево на 1 разряд
        }
  printf(" Descremb(%x) = %d \n", vr_bite, outbyte.sbyte);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2017, 22:36
Ответы с готовыми решениями:

Скремблирование и прочее
Добрый день, помогите разобраться. Нужно написать программу для скремблирование файлов. Но перед...


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

Или воспользуйтесь поиском по форуму:
1
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 2
01.11.2017, 22:40  [ТС] 2
Может кому-нибудь пригодится работающая программа
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
#include <stdio.h>
#include <stdint.h>
 
typedef union{
 
 unsigned short sbyte;
 
struct
{
    unsigned b0: 1;
    unsigned b1: 1;
    unsigned b2: 1;
    unsigned b3: 1;
    unsigned b4: 1;
    unsigned b5: 1;
    unsigned b6: 1;
    unsigned b7: 1;
    unsigned b8: 1;
    unsigned b9: 1;
    unsigned b10: 1;
    unsigned b11: 1;
    unsigned b12: 1;
    unsigned b13: 1;
    unsigned b14: 1;
    unsigned b15: 1;
         };
} new_type;
 
int main()
{
    unsigned char m[10] = { 44, 62, 50, 60, 23, 16, 34, 60, 32 , 99};
    unsigned short vr_bite, bit;
 
    new_type inbyte;
    new_type in_sbit;
    new_type out_sbit;
 
    out_sbit.sbyte = 0;
    in_sbit.sbyte = 0;
 
    for ( int i = 0; i < 10; ++i ) {
        inbyte.sbyte = m[i];
 
        for ( int j = 0; j < 10; ++j) {
            bit = inbyte.b0 ^ (in_sbit.b2 ^ in_sbit.b6 ^ in_sbit.b9);
            in_sbit.sbyte <<= 1;
            in_sbit.b0 = bit;
            inbyte.sbyte >>= 1;
            inbyte.b9 = bit;
          }
     printf("Scremb(%x) = %x \t", m[i], inbyte.sbyte);
 
     vr_bite = inbyte.sbyte;
 
     for ( int j = 0; j < 10; ++j) {
        bit = inbyte.b0 ^ (out_sbit.b2 ^ out_sbit.b6 ^ out_sbit.b9);
        out_sbit.sbyte <<= 1;
        out_sbit.b0 = inbyte.b0;
 
        inbyte.sbyte >>= 1;
        inbyte.b9 = bit;
 
        }
  printf("Descremb(%x) = %x \n", vr_bite, inbyte.sbyte);
    }
}
0
01.11.2017, 22:40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru