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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 01:08     Шифрование ГОСТА28147-89 #1
string k="hhhh", k1="kjhg";
string str=k xor k1; // это получается какая-то 4 байтовая абракадабра вроде ♥☺♣

подскажите пожалуста как из полученой абракадабры получить 8 4-ех битные символы(желательно типа int)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2012, 01:08     Шифрование ГОСТА28147-89
Посмотрите здесь:

C++ Шифрование
шифрование C++
C++ Шифрование
C++ Шифрование
C++ c++ шифрование
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.05.2012, 01:35     Шифрование ГОСТА28147-89 #2
Цитата Сообщение от Lyonchik Посмотреть сообщение
подскажите пожалуста как из полученой абракадабры получить 8 4-ех битные символы(желательно типа int)
внятно объясни что из чего получить
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 01:37  [ТС]     Шифрование ГОСТА28147-89 #3
вот:
4-ех байтовая строка
ее надо разделить на 8 4-ех битовые части
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
10.05.2012, 02:08     Шифрование ГОСТА28147-89 #4
Lyonchik, всё-равно ведь понятнее не стало. Если нужно удобное для восприятия представление, то обычно эти байты выводят на экран (или ещё куда) в виде шестнадцатеричного представления. Это что-ли надо?

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

Добавлено через 51 секунду
http://ru.wikipedia.org/wiki/%D0%93%...D0%A2_28147-89
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
10.05.2012, 02:12     Шифрование ГОСТА28147-89 #6
Да, я в курсе как устроен шифр. И про блок замен успел-таки выше написать
Ну хотя-бы по две таблицы объедини, будет четыре 8-битных таблицы, уже проще.
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 02:16  [ТС]     Шифрование ГОСТА28147-89 #7
grizlik78, а как осуществить эту конвертацию?
на с4ет маски спасибо,я умножала просто на 1,так можно?
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
10.05.2012, 02:20     Шифрование ГОСТА28147-89 #8
Умножением на 1 выделяется только 1 бит. Для 4 бит нужно число, в двоичной записи которого 4 единицы подряд, то есть 15 или 0xF.
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 02:26  [ТС]     Шифрование ГОСТА28147-89 #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];
}
и на выходе получаю инт,но следуя вашему совету эта ф-я уже будет ненужна?
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
10.05.2012, 02:31     Шифрование ГОСТА28147-89 #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];
Это, разумеется, просто эскиз. И можно обойтись и без этого.
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 02:42  [ТС]     Шифрование ГОСТА28147-89 #11
Ухай,мне это ппонравилось ,спасибо grizlik78 , продолжу экспериментировать
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
20.05.2012, 22:32  [ТС]     Шифрование ГОСТА28147-89 #12
а как можно умножить по модулю 16
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
20.05.2012, 22:39     Шифрование ГОСТА28147-89 #13
Цитата Сообщение от Lyonchik Посмотреть сообщение
помогите исправить ошибку
Какую?

Добавлено через 1 минуту
Код
$ gcc gost.c -Wall -O3 -DTEST 
$ ./a.out                    
GOST 21847-89 test driver.
All tests passed.
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
21.05.2012, 10:50  [ТС]     Шифрование ГОСТА28147-89 #14
Извините, выставила код,сама же нашла ошибку, удалила, видимо не до конца(((
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
21.05.2012, 11:15     Шифрование ГОСТА28147-89 #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
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
21.05.2012, 11:27  [ТС]     Шифрование ГОСТА28147-89 #16
а вот новая, что он хочет?
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

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

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

C++ Шифрование
Шифрование C++
Шифрование C++

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

Или воспользуйтесь поиском по форуму:
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
21.05.2012, 11:53  [ТС]     Шифрование ГОСТА28147-89 #20
последние два я делала и ноль реакции, побробую еще разок

Добавлено через 8 минут
ура!!! получилось, спасибо
Yandex
Объявления
21.05.2012, 11:53     Шифрование ГОСТА28147-89
Ответ Создать тему
Опции темы

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