Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2011, 20:44   #1
Pecho
Пользователь
 
Регистрация: 23.11.2010
Сообщений: 37
По умолчанию Произведение вектора и матрицы. Шифрование. Си

Доброго времени суток!
Пишу программу, реализующую сеть Фейстеля (3 итерации). Задание к программе требует, чтобы в функции преобразования преобразуемый подблок, после побитового сложения с ключём и преобразования с подстановками, умножался на матрицу.

Вот этот момент и вызывает ошибки и проблемы, прошу посмотреть листинг и помочь с умножением вектора на матрицу.

Привел фрагменты кода, касающиеся именно матриц. В задании даются матрицы размерности 32х32, но здесь для уменьшения размера кода привожу их как 8х8

Язык программирования - Си

Код:
#include <stdio.h>
#include <string.h>
unsigned int L[3]; //массив для матриц
unsigned int vector[1][8]; //подблок, для перемножения на матрицу
 
unsigned int FuncPreobr(unsigned int SubBlok, unsigned int num)
//функция преобразования, 
//SubBlok-поступивший на преобразование подблок,
//num - число итераций сетки Фейстеля, поступает из void Encrypt(), может быть 0,1,2
{
    ......
        //умножение вектора на матрицы 
        int i;
        for(i=0;i<8;i++) vector[0][i] = (SubBlok>>(7-i))&1;//побитно растаскиваем подблок в массив
        vector *= L[num];
        SubBlok=0;
        for(i=0;i<8;i++) SubBlok ^= (vector[0][i]<<(7-i));//обратно
        return SubBlok;
}
 
void Encrypt(unsigned char *l, unsigned char *r)//процедура шифрования
{
   .......
}
 
int main(int argc, char** argv)//точка входа в программу
{
        //Матрицы
        unsigned int L1[8][8];
        unsigned int L2[8][8];
        unsigned int L3[8][8];
                unsigned int l1[] =  {0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,0,0,
0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0,1,0,0,0,0,0};
                unsigned int l2[] =  {0,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,0,0,1,0,0,0,1,1,1,0,0,0,1,
0,1,1,1,1,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,0,0,0,1,0,1,0};
                unsigned int l3[] =  {0,0,0,1,1,1,0,0,1,1,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,1,1,0,1,0,0,1,1,1,1,0,0,
1,1,0,1,1,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0};
                int i,j;
                for (i=0;i<8;i++) 
                        for (j=0;j<8;j++) 
                        {
                                L1[i][j]=*(l1+8*i+j);
                                L2[i][j]=*(l2+8*i+j);
                                L3[i][j]=*(l3+8*i+j);
                        }
                L[0]=L1;
                L[1]=L2;
                L[2]=L3;
 
    .........
}
Pecho вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Произведение вектора и матрицы. Шифрование. Си Pecho Помощь студентам 0 15.02.2011 10:43
произведение матрицы на вектор Artur1992 Паскаль, Turbo Pascal, PascalABC.NET 1 10.01.2011 22:32
Произведение матрицы BaronVik Помощь студентам 2 05.05.2010 08:49
Сумма четных элементов матрицы. Произведение элементов 3-го столбца. Минимальный элемент матрицы. renovare Помощь студентам 2 03.07.2009 21:13
Произведение элементов матрицы Sasuke-sama Microsoft Office Excel 1 28.05.2009 05:13