Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Lyonchik
0 / 0 / 1
Регистрация: 08.05.2012
Сообщений: 89
#1

Шифрование ГОСТА28147-89

10.05.2012, 01:08. Просмотров 1447. Ответов 34
Метки нет (Все метки)

string k="hhhh", k1="kjhg";
string str=k xor k1; // это получается какая-то 4 байтовая абракадабра вроде ♥☺♣

подскажите пожалуста как из полученой абракадабры получить 8 4-ех битные символы(желательно типа int)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2012, 01:08
Ответы с готовыми решениями:

Шифрование с помощью матрицы и вектора (шифрование методом аналитических преобразований)
Программисты Здравствуйте! Не могу сделать этот метод,не понимаю и все тут),...

Как поменять результат шифрование \ Метод шифрование RSA
Здравствуйте! Прошу помощи! В просторах интернета нашла одну статью в которой...

Шифрование
Нужна помощь в задачи, суть ее Дана некоторая строка. Известно, что она...

шифрование)
Программа должна реализовывать шифрования и расшифровки текстовых фалов. Имя...

Шифрование
Добрый день. Может кто помочь с задачкой. Нужно создать ключ в виде матрицы...

34
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.05.2012, 01:35 #2
Цитата Сообщение от Lyonchik Посмотреть сообщение
подскажите пожалуста как из полученой абракадабры получить 8 4-ех битные символы(желательно типа int)
внятно объясни что из чего получить
0
Lyonchik
0 / 0 / 1
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 01:37  [ТС] #3
вот:
4-ех байтовая строка
ее надо разделить на 8 4-ех битовые части
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
10.05.2012, 02:08 #4
Lyonchik, всё-равно ведь понятнее не стало. Если нужно удобное для восприятия представление, то обычно эти байты выводят на экран (или ещё куда) в виде шестнадцатеричного представления. Это что-ли надо?

Добавлено через 4 минуты
Но если речь про блок подстановок... По четыре бита обычно не выделяют, это неэффективно. Но раз уж очень хочется, то можно. Только со строками здесь работать совсем не удобно, лучше блок данных представлять в виде беззнакового 32-битного целого. А по четыре бита можно выделять при помощи сдвигов и логического умножения на маску 0x000F.
1
Lyonchik
0 / 0 / 1
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 02:10  [ТС] #5
нет(((
string k1="asdf",left="sder"; //4 baita
t1=XOR(left,k1);
к1 и лефт складываются по модулю .
Результат разбивается на восемь 4-битовых подпоследовательностей, каждая из которых поступает на вход своего узла таблицы замен .

Добавлено через 51 секунду
http://ru.wikipedia.org/wiki/%D0%93%D0%9E%D0%A1%D0%A2_28147-89
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
10.05.2012, 02:12 #6
Да, я в курсе как устроен шифр. И про блок замен успел-таки выше написать
Ну хотя-бы по две таблицы объедини, будет четыре 8-битных таблицы, уже проще.
1
Lyonchik
0 / 0 / 1
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 02:16  [ТС] #7
grizlik78, а как осуществить эту конвертацию?
на с4ет маски спасибо,я умножала просто на 1,так можно?
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
10.05.2012, 02:20 #8
Умножением на 1 выделяется только 1 бит. Для 4 бит нужно число, в двоичной записи которого 4 единицы подряд, то есть 15 или 0xF.
0
Lyonchik
0 / 0 / 1
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 02:26  [ТС] #9
grizlik78, для с-блокков у меня такая ф-я
int SBOX(int ii,int jj)
{
int S[8][16] = {
{ 4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3},
{14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7, 5, 9},
{ 5, 8, 1, 13, 10, 3, 4, 2, 14, 15, 12, 7, 6, 0, 9, 11},
{ 7, 13, 10, 1, 0, 8, 9, 15, 14, 4, 6, 12, 11, 2, 5, 3},
{ 6, 12, 7, 1, 5, 15, 13, 8, 4, 10, 9, 14, 0, 3, 11, 2},
{ 4, 11, 10, 0, 7, 2, 1, 13, 3, 6, 8, 5, 9, 12, 15, 14},
{13, 11, 4, 1, 3, 15, 5, 9, 0, 10, 14, 7, 6, 8, 2, 12},
{ 1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12},
};
return S[ii][jj];
}
и на выходе получаю инт,но следуя вашему совету эта ф-я уже будет ненужна?
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
10.05.2012, 02:31 #10
Можно и оставить. Просто если объединить таблицы, по две или по четыре, то шифрование можно сделать эффективнее, поскольку не придётся байты разделять на 2 половины.
Две таблицы можно объединить примерно так:
C++
1
2
3
4
5
6
7
8
    int table0[16] = { 4, 10, 9, 2, 13, 8, 0, 14, 6, 11, 1, 12, 7, 15, 5, 3 }; 
    int table1[16] = { 14, 11, 4, 12, 6, 13, 15, 10, 2, 3, 8, 1, 0, 7, 5, 9}; 
 
    int table01[256];
 
    for (int i0 = 0; i0 < 16; ++i0)
        for (int i1 = 0; i1 < 16; ++i1)
            table01[ (i0 << 4) | i1 ] = (table0[i0] << 4) | table1[i1];
Это, разумеется, просто эскиз. И можно обойтись и без этого.
0
Lyonchik
0 / 0 / 1
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 02:42  [ТС] #11
Ухай,мне это ппонравилось ,спасибо grizlik78 , продолжу экспериментировать
0
Lyonchik
0 / 0 / 1
Регистрация: 08.05.2012
Сообщений: 89
20.05.2012, 22:32  [ТС] #12
а как можно умножить по модулю 16
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
20.05.2012, 22:39 #13
Цитата Сообщение от Lyonchik Посмотреть сообщение
помогите исправить ошибку
Какую?

Добавлено через 1 минуту
Код
$ gcc gost.c -Wall -O3 -DTEST 
$ ./a.out                    
GOST 21847-89 test driver.
All tests passed.
0
Lyonchik
0 / 0 / 1
Регистрация: 08.05.2012
Сообщений: 89
21.05.2012, 10:50  [ТС] #14
Извините, выставила код,сама же нашла ошибку, удалила, видимо не до конца(((
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
21.05.2012, 11:15 #15
Цитата Сообщение от Lyonchik Посмотреть сообщение
Извините, выставила код,сама же нашла ошибку, удалила, видимо не до конца(((
А там была ошибка? Не заметил Код был совершенно рабочий, хотя и чужой.
Цитата Сообщение от Lyonchik Посмотреть сообщение
а как можно умножить по модулю 16
Вариантов много
C++
1
2
3
4
(a * b) % 16
(a * b) & 15
(a & 15) * (b & 15) & 15
(a % 16) * (b % 16) % 16
1
Lyonchik
0 / 0 / 1
Регистрация: 08.05.2012
Сообщений: 89
21.05.2012, 11:27  [ТС] #16
а вот новая, что он хочет?
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

Добавлено через 2 минуты
Знаю,что чужой,нашла более удобную реализацию, чтоб свой собственный как-то исправить

Добавлено через 1 минуту
И все-таки он у меня не работает
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
21.05.2012, 11:28 #17
Цитата Сообщение от Lyonchik Посмотреть сообщение
а вот новая, что он хочет?
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
Нет функции main()
Эта функция была в коде, но для того, чтобы она компилировалась требуется определить макрос TEST
0
Lyonchik
0 / 0 / 1
Регистрация: 08.05.2012
Сообщений: 89
21.05.2012, 11:34  [ТС] #18
Цитата Сообщение от grizlik78 Посмотреть сообщение
Нет функции main()
Эта функция была в коде, но для того, чтобы она компилировалась требуется определить макрос TEST
Простите,но у меня ничо с этим не получилось, та же ошибка, скажите как правилнее его определить?
0
grizlik78
Эксперт С++
1983 / 1476 / 191
Регистрация: 29.05.2011
Сообщений: 3,050
21.05.2012, 11:38 #19
Я определял добавляя в командной строке ключ -DTEST. Но Это зависит от компилятора.
Можно самой первой строкой программы написать
C
1
#define TEST
А можно просто удалить/закомментировать пару директив
C
1
2
3
#ifdef TEST
/* ... */
#endif
обрамляющих main
0
Lyonchik
0 / 0 / 1
Регистрация: 08.05.2012
Сообщений: 89
21.05.2012, 11:53  [ТС] #20
последние два я делала и ноль реакции, побробую еще разок

Добавлено через 8 минут
ура!!! получилось, спасибо
0
21.05.2012, 11:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2012, 11:53

Шифрование
Может кто помочь с этими Тремя заданиями? Буду очень благодарен ))...

шифрование
шифр Трисмуса – многоалфавитное с ключом усовершенствование шифра Цезаря ...

Шифрование
Расскажите пожалуйста как с шифрованием в Лотус дела обстоят? Как алгоритм...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru