Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
#1

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

10.05.2012, 01:08. Просмотров 1419. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Шифрование ГОСТА28147-89 (C++):

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

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

MS Access Шифрование - Delphi БД
Нужна помощь. Нужно усложнить код шифрования. procedure TFormMain.Button1Click(Sender: TObject); var t:string; i,j:integer; ...

Шифрование - C++
Привет всем:) особенно тем кто в этот день тратит свое время на программирование:) Помогите решить такую задачу. Есть целое число "1234"....

Шифрование - Assembler
Предположим, мы имеем следующие простые алгоритм симметричного шифрования (в C / C + +, используя 32-битные ключи). Написать...

Шифрование - Криптография
Ребят помогите решить задачу, за раннее спасибо Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.

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

Добавлено через 4 минуты
Но если речь про блок подстановок... По четыре бита обычно не выделяют, это неэффективно. Но раз уж очень хочется, то можно. Только со строками здесь работать совсем не удобно, лучше блок данных представлять в виде беззнакового 32-битного целого. А по четыре бита можно выделять при помощи сдвигов и логического умножения на маску 0x000F.
1
Lyonchik
0 / 0 / 0
Регистрация: 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
Эксперт С++
1981 / 1474 / 127
Регистрация: 29.05.2011
Сообщений: 3,047
10.05.2012, 02:12 #6
Да, я в курсе как устроен шифр. И про блок замен успел-таки выше написать
Ну хотя-бы по две таблицы объедини, будет четыре 8-битных таблицы, уже проще.
1
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 02:16  [ТС] #7
grizlik78, а как осуществить эту конвертацию?
на с4ет маски спасибо,я умножала просто на 1,так можно?
0
grizlik78
Эксперт С++
1981 / 1474 / 127
Регистрация: 29.05.2011
Сообщений: 3,047
10.05.2012, 02:20 #8
Умножением на 1 выделяется только 1 бит. Для 4 бит нужно число, в двоичной записи которого 4 единицы подряд, то есть 15 или 0xF.
0
Lyonchik
0 / 0 / 0
Регистрация: 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
Эксперт С++
1981 / 1474 / 127
Регистрация: 29.05.2011
Сообщений: 3,047
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 / 0
Регистрация: 08.05.2012
Сообщений: 89
10.05.2012, 02:42  [ТС] #11
Ухай,мне это ппонравилось ,спасибо grizlik78 , продолжу экспериментировать
0
Lyonchik
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 89
20.05.2012, 22:32  [ТС] #12
а как можно умножить по модулю 16
0
grizlik78
Эксперт С++
1981 / 1474 / 127
Регистрация: 29.05.2011
Сообщений: 3,047
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 / 0
Регистрация: 08.05.2012
Сообщений: 89
21.05.2012, 10:50  [ТС] #14
Извините, выставила код,сама же нашла ошибку, удалила, видимо не до конца(((
0
grizlik78
Эксперт С++
1981 / 1474 / 127
Регистрация: 29.05.2011
Сообщений: 3,047
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
21.05.2012, 11:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2012, 11:15
Привет! Вот еще темы с ответами:

Шифрование - Delphi
помоги написать курсовую &quot;Криптоанализ на основе задачи о рюкзаке&quot;. Пожалуйстаааа*** Не хочу со стипендии слететь(((((((

Шифрование - Delphi
Помогите пожалуйста, мне нужна функция которая переводит текст из Memo1 в двоичный код, и чтоб переводила его обратно только в Edit1,...

Шифрование - Windows 7
Животрепещущий вопрос. Исходные данные. В системе - 2 физических диска, С и E. На диске Е есть папка, зашифрованная стандартными...

Шифрование - Delphi
Можете поделиться программами по шифрованию текста любым методом.


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

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

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