Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 5

Шифрование последовательности из 64 символов с использованием гаммирования квадратичным конгруэнтным методом

12.11.2021, 20:04. Показов 2158. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите, пожалуйста, решить задание на шифрование методом гаммирования на ассемблере 32-bit MCUs (PIC32). Не могу понять. как реализовать(((
Задание звучит следующим образом:
"Шифрование последовательности из 64 символов с использованием гаммирования. Для генерации гаммы использовать квадратичный конгруэнтный метод (16-ти битная реализация)".
Для данного метода прикрепляю необходимую формулу.

Для данного задания есть пример кода с другим методом XORshift (пример реализации генератора псевдослучайной последовательности методом XORshift, являющимся подклассом алгоритмов ГПСЧ на основе регистра сдвига с линейной обратной связью. Алгоритм на пcевдокоде для 16-ти битных регистров с циклом в (2^32)-1 (то есть, через 2^32 значений последовательность начнет повторяться).)

Assembler
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
#include <xc.h>
/*(x = y = 12345) начальное значение, является "зерном" алгоритма*/
/*в зависимости от начального состояния зависит генерируемая последовательность*/
/*t =(x XOR (x << 5))*/
/*x = y*/
/*y = (y XOR (y >> 1)) XOR (t XOR ( t>> 3))*/
.global main
.data
out: .word 256
.text
.ent main
main:
/*Задаем начальное состояние*/
la $s1, 12345       /*y*/
la $t2, 64              /*Количество итераций*/
 
la $t0, out             /*Указатель на выходную строку*/
sw $s1, ($t0)       /*write y*/
add $t0, $t0, 4
add $s0, $s1, $zero /*x = y*/
cycle:
sll $s2, $s0, 5     /*$s2 = x << 5*/
xor $s2, $s0, $s2   /*t = $s2 = x xor $s2*/
add $s0, $s1, $zero /*x = y*/
srl $s3, $s2, 3     /*$s3 = t >> 3*/
xor $s3, $s2, $s3   /*$s3 = t xor s3*/
srl $s2, $s1, 1     /*$s2 = y >> 1*/
xor $s2, $s1, $s2   /*$s2 = y xor $s2*/
xor $s1, $s2, $s3   /*y = $s1 = $s2 xor $s3*/
sw $s1, ($t0)       /*write y*/
add $t0, $t0, 4
add $t2, $t2, -1
bne $t2, $zero, cycle
nop
.end main
Изображения
 
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2021, 20:04
Ответы с готовыми решениями:

Шифрование символьной информации мультипликативным конгруэнтным методом
Нужно написать код на Си. Даже в голове не понимаю как все это должно выглядеть… заранее спасибо Реализовать механизм шифрования и...

Шифрование методом гаммирования
Мультипликативный а = 5, m = 4096, Y0 = 3091 #include&lt;iostream&gt; #include&lt;math.h&gt; #include&lt;string&gt; #define a 5 #define m 4096...

Шифрование методом гаммирования
Задали курсовой проект на тему:&quot;Программа шифрования данных методом гаммирования&quot;. Если кто то может поделиться идеей как это все...

7
4042 / 2654 / 582
Регистрация: 11.09.2009
Сообщений: 9,486
14.11.2021, 10:54
Цитата Сообщение от kot2020 Посмотреть сообщение
Не могу понять
- это означает "надо сделать за вас", или вы действительно чего-то не можете понять в этом задании? Тогда скажите, что именно вам непонятно.
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 5
14.11.2021, 17:46  [ТС]
i8085, я не понимаю, в чем смысл метода гаммирования и его реализации через квадратичный конгруэнтный метод, каким образом должна закодироваться моя входная строка в результате. Я уже читала много информации, но и написать код я не могу, не зная, что получу на выходе для начала даже аналитически, а не через код.
0
4042 / 2654 / 582
Регистрация: 11.09.2009
Сообщений: 9,486
14.11.2021, 18:30
Цитата Сообщение от kot2020 Посмотреть сообщение
в чем смысл метода гаммирования и его реализации через квадратичный конгруэнтный метод
В том, же, что и при использовании генератора псевдослучайной последовательности, - получение последовательности байтов, которыми шифруются данные. Только по другой формуле.
"Начальное значение, которое является "зерном" алгоритма" - это число-ключ. Шифратор и дешифратор начинают генерирование псевдослучайных байтов с этого числа, по одному и тому же алгоритму, поэтому будут иметь одну и ту же последовательность псевдослучайных байтов, что и позволяет расшифровать зашифрованное. Собственно шифрация и дешифрация обычно осуществляется операцией XOR очередного байта шифруемой (или дешифруемой) последовательности с очередным байтом псевдослучайной последовательности. А два раза (один раз при шифровании, второй - при дешифровке) операция XOR с одним и тем же байтом - получим тот же, неизменённый байт.

Например:
Шифрование.
0A 67 3B - исходная последовательность
77 29 65 - псевдослучайная последовательность
7D 4E 5E - результат XOR - зашифрованная последовательность
Дешифрование.
7D 4E 5E - входная последовательность
77 29 65 - псевдослучайная последовательность
0A 67 3B - результат XOR - исходная последовательность
1
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 5
14.11.2021, 19:54  [ТС]
i8085, то есть сам квадратичный конгруэнтный метод - это так называемый ключ для кодируемой последовательности символов, а само кодирование будет осуществляться через операцию XOR?
По формуле квадратичного конгруэнтного метода a,b, d и m я могу взять любые числа, как константы?
Какие коэффициенты разумнее подобрать при этом, подойдет m=10, X0=a=d=7, b=6?

Добавлено через 53 минуты
Я написала, но не уверена в правильности, и у меня почему-то в результате не выводится ни входная, ни выходная строка (в окне Data Memory)
Code
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
#include <xc.h>
 
.global    main
.data
          msg_in: .ascii " Ring the bell. Hello world !!!  Ring the bell. Hello world !!!\n"
          msg_out: .space 256
   
.text
.ent main
main:
    /*Указатель на квадратичный конгруэнтный метод*/
    li $s4,7    /*значение X0*/
    li $s5,7    /*значение a*/
    li s6,6     /*значение b*/
    li $s7,7    /*значение d*/
    li $s8,10   /*значение m*/
    sub $s9,$s4,1   /*значение X.(n-1)*/ 
    mul $s10,$s9,$s9    /*значение X.(n-1)^2*/
    mul $s10,s5,$s10    /*значение a*X.(n-1)^2*/
    mul $s11,$s6,$s9    /*значение b*X.(n-1)*/   
    add $s11,$s10,$s11   /*значение a*X.(n-1)^2+b*X.(n-1)*/  
    add $s11,$s11,$s7   /*значение a*X.(n-1)^2+b*X.(n-1)+d*/ 
    div $s11,$s8        
    mfhi $s11   
    /*Указатель на ключ*/
          la t0, $s11
          addi t0, t0, -1
    /*Указатель на входную строку*/
          la t1, msg_in
          addi t1, t1, -1
    /*Указатель на выходную строку*/
          la t2, msg_out
          addi t2, t2, -1
    /*Cимвол конца строки*/
          la s3, '\n'
lab_1:  
    /*Загрузка символа ключа*/
          addi t0, t0, 1
          lb s0, (t0)
          bne s0, s3, lab_2
          la t0, key
          addi t0, t0, -1
          j lab_1
lab_2:
    /*Загрузка символа входной строки*/
          addi t1, t1, 1
          lb s1, (t1)
          beq s1, s3, lab_3
    /*Шифрование XOR*/
          xor s2, s1, s0
    /*Запись зашифрованного символа*/
          addi t2, t2, 1
          sb s2, (t2)
          j lab_1
lab_3:
          addi t2, t2, 1
          sb s3, (t2)
end_l:
          j end_l
.end main
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 5
15.11.2021, 21:32  [ТС]
Тот вариант кода неверен, этот тоже под вопросом

Code
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
#include <xc.h>
 
.global main
.data
msg_in: .ascii " Ring the bell. Hello world !!! Ring the bell. Hello world !!!\n"
msg_out: .space 256
 
.text
.ent main
main:
/*Указатель на ключ*/
la $t0, ($t9)
addi $t0, $t0, -1
/*Указатель на входную строку*/
la $t1, msg_in
addi $t1, $t1, -1
/*Указатель на выходную строку*/
la $t2, msg_out
addi $t2, $t2, -1
/*Cимвол конца строки*/
la $s3, '\n'
lab_1:
/*Указатель на квадратичный конгруэнтный метод*/
li $s4,7 /*значение X0*/
li $s5,7 /*значение a*/
li $s6,6 /*значение b*/
li $s7,7 /*значение d*/
li $t4,10 /*значение m*/
sub $t5,$s4,1 /*значение X.(n-1)*/
mul $t6,$t5,$t5 /*значение X.(n-1)^2*/
mul $t7,$s5,$t6 /*значение a*X.(n-1)^2*/
mul $t8,$s6,$t5 /*значение b*X.(n-1)*/
add $t9,$t7,$t8 /*значение a*X.(n-1)^2+b*X.(n-1)*/
add $t9,$s7,$t9 /*значение a*X.(n-1)^2+b*X.(n-1)+d*/
div $t9,$t4
mfhi $t9
/*Загрузка символа ключа*/
addi $t0, $t0, 1
lb $s0, ($t0)
bne $s0, $s3, lab_2
la $t0, ($t9)
addi $t0, $t0, -1
j lab_1
lab_2:
/*Загрузка символа входной строки*/
addi $t1, $t1, 1
lb $s1, ($t1)
beq $s1, $s3, lab_3
/*Шифрование XOR*/
xor $s2, $s1, $s0
/*Запись зашифрованного символа*/
addi $t2, $t2, 1
sb $s2, ($t2)
j lab_1
lab_3:
addi $t2, $t2, 1
sb $s3, ($t2)
end_l:
j end_l
.end main
0
4042 / 2654 / 582
Регистрация: 11.09.2009
Сообщений: 9,486
15.11.2021, 23:02
Цитата Сообщение от kot2020 Посмотреть сообщение
вариант кода неверен
Это преподаватель сказал?
Ваш код проверить на работоспособность не могу, да и глубоко вникать нет ни желания, ни времени, хотя в принципе понимаю, что написано. Ну разве кроме некоторых мнемоник, типа "mfhi, lb, la". Но код нечитаемый.
Было бы гораздо легче беглым взглядом пробежаться по коду и увидеть сомнительные места, если бы вы каждой строчке написали коментарий, - что в ней происходит, какой указатель или переменная изменяется (с её нормальным названием), чему становится равна... Отслеживать регистры по номерам, в каком что находится - это бумагу надо брать, записывать, мозг напрягать... Да и скорее всего, если так сделаете, то сами быстрее найдёте, если где есть ляпы, чем на форуме кто-то разглядит.

Вот например, хотел разглядеть и не смог, где задаётся значение ключа,
не понял, зачем внутри цикла каждый раз установка начальных значений $s4-$s7, хотя они далее не изменяются,
почему цикл lab_1: называется "Указатель на квадратичный конгруэнтный метод", хотя в нём производится вычисление полинома и (де)кодирование очередного символа, из указателей там только указатели на строки,
в $s3 у вас один или два символа? "$s3" - это регистр или строка? Почему потом двойная проверка на конец строки, текущего и следующего символа, и оба сравниваются с $s3? ...
0
0 / 0 / 0
Регистрация: 06.11.2021
Сообщений: 5
16.11.2021, 00:01  [ТС]
i8085, спасибо большое, в теме уже разобрались. Да, действительно, в данном коде много недочетов, но вы натолкнули на верную мысль. Еще раз благодарю!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2021, 00:01
Помогаю со студенческими работами здесь

Шифрование методом гаммирования
Просьба выложите у кого есть, прогуглил но таки и не нашел реализацию этого шифрования на php. P.S. как можно сложить 2 числа в двоичном...

Шифрование методом гаммирования
Гаммирование Процесс зашифрования заключается в генерации гаммы шифра и наложении этой гаммы на исходный открытый текст. Перед...

Шифрование методом гаммирования
Помогите с задачей. Шаг 1. Получить от пользователя ключ, имя входного и выходного файла. Шаг 2. Инициализировать генератор случайных...

Шифрование методом гаммирования
Доброго времени суток! Вся соль в том, что реализовать шифрование нужно таким образом, чтобы ГАММА генерировалась рандомно, с привязкой...

Шифрование методом гаммирования
Дешифровать сообщение(методом гаммирования) Гамма: 4 32 5 25 Шифрограмма: ЗоБЛМхБЩУаФТМх По формуле: { T }_{ 0 }^{ i }={...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru