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

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

Войти
Регистрация
Восстановить пароль
 
артист
7 / 9 / 4
Регистрация: 17.09.2014
Сообщений: 953
Завершенные тесты: 1
#1

Как записать в byte большое число? - C++

04.01.2016, 23:53. Просмотров 514. Ответов 6
Метки нет (Все метки)

В общем первый блок в AES должен содержать длину всех шифруемых данных.
Шифруемый блок имеет длину 16 байт.
byte - содержит значения от 0 до 255.
Может можно разбить число на блоки?

Ну например длина данных 243567755 байт.

Что если создать

C++
1
long long llDataLenght
Это вроде __int64 как раз 128 бит, т.е. состоит из 16 байт.

Далее записать в него длину и.

C++
1
2
3
byte bData[16]; // Буфер
 
for(new i = 0, i < 16, ++i) bData[i] = llDataLenght >> (i * 8);
Т.е. получится раскидать число по байтам.

Прокатит так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2016, 23:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как записать в byte большое число? (C++):

Как правильно записать большое число - C++
Есть число размер 10^100 как правильно записывать такие числа? Спасибо!

Как записать большое число в виде строки a*b^n+c - C++
Как записать большое целое число в виде строки a*b^n +c где a, b, n, c = int или long long. Например: 12*(2^32) + 7. Для того, чтобы...

Как в BYTE записать DWORD - C++
Здравствуйте! Подскажите, пожалуйста, как в BYTE *b; b = new BYTE; записать с byte размером 4 байта DWORD значение

Как записать в переменную большое количество текста? - C++
Как записать в переменную большое количество текста ? Но этот текст с слешами, лапками, и прочими спец символами..

Как записать и прочитать int (4 byte) из char[] - C++
Buffer.h #ifndef BUFFER_CPP_H #define BUFFER_CPP_H #include &lt;vector&gt; template &lt;class T&gt; class Buffer { ...

Как преобразовать большое число в строку - C++
Делаю такое преобраование char szbuff; double X=3292373930; sprintf(szbuff, &quot;%g&quot;, X); string X_str=szbuff; В результате...

6
nonedark2008
931 / 670 / 147
Регистрация: 28.07.2012
Сообщений: 1,827
05.01.2016, 01:07 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от артист Посмотреть сообщение
Прокатит так?
Прокатит.
Но тут стоило догадаться, что размер __int64 равен 16 байтам.
И можно просто скастовать указатель на __int64 к указателю на byte.
Типа так:
C++
1
2
__int64 a = 1;
byte *pA = (byte *)&a;
Или через объединения...
Или подумать и прийти к выводу, что для AES не нужен никакой __int64, а достаточно просто byte.
1
артист
7 / 9 / 4
Регистрация: 17.09.2014
Сообщений: 953
Завершенные тесты: 1
05.01.2016, 01:23  [ТС] #3
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Но тут стоило догадаться, что размер __int64 равен 16 байтам.
И можно просто скастовать указатель на __int64 к указателю на byte.
Типа так:
C++
1
2
__int64 a = 1;
byte *pA = (byte *)&a;
Так нельзя, мне массив нужен а не указатели(я вообще не знаю что это).

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Или подумать и прийти к выводу, что для AES не нужен никакой __int64, а достаточно просто byte.
Я знаю, но ведь число 653456 больше чем допустимое в byte.
Ну и мои познания в С++ скромны, поэтому предположил, что можно это реализовать таким способом...

Я пытаюсь переделать код с JAVA на С++
Java
1
2
var blocks = bits.split(data.length, 16)            // Записываем длину текста в блок из 16 байт
var result = aes.cipher(blocks, key)                // Шифруем первый блок с размером текста паролем
Сама функция bits.split:
Java
1
2
3
4
5
6
7
8
9
10
11
split: function(int, bytes)
{
    var res = []
 
    for (var i = 0; i < bytes; i++)
    {
        res.push(int & 0xff) // Записывать число в каждый байт ?
        int >>>= 8 // Сдвиг на 8 бит 
    }
    return res
}
Как тут записывается длина вообще не понимаю.
Но думаю так же...
0
nonedark2008
931 / 670 / 147
Регистрация: 28.07.2012
Сообщений: 1,827
05.01.2016, 03:18 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от артист Посмотреть сообщение
Так нельзя, мне массив нужен а не указатели
А разница?
C++
1
2
3
4
5
__int64 a = 1;
byte *pA = (byte *)&a;
pA[0]; // первый байтик числа
pA[1]; // второй байтик числа
...
Цитата Сообщение от артист Посмотреть сообщение
Я знаю, но ведь число 653456 больше чем допустимое в byte.
А зачем вам такие большие числа?
Да и вообще, вопрос в интерпретации.
В unsigned __int64 влезет максимум число http://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{64}-1.
Если хочется больше, то берешь два unsigned __int64, туда уже влезет http://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{128}-1.
Твой AES вроде как должен работать с байтами, на этом завязаны все перемешивания и т.п.,
а ты зачем-то пытаешься работать сразу с блоком из 16 байт (А в памяти __int64 и есть блок из 16 байт).

Не по теме:


Цитата Сообщение от артист Посмотреть сообщение
я вообще не знаю что это
Зачем писать шифрование на плюсах, если писать на плюсах не умеете?
Вы вроде бы уже давно с этой фигней сидите...

1
pproger
164 / 67 / 13
Регистрация: 22.03.2011
Сообщений: 196
05.01.2016, 04:32 #5
Цитата Сообщение от артист Посмотреть сообщение
Это вроде __int64 как раз 128 бит
ну тупыыыые
2
артист
7 / 9 / 4
Регистрация: 17.09.2014
Сообщений: 953
Завершенные тесты: 1
05.01.2016, 06:26  [ТС] #6
Цитата Сообщение от nonedark2008 Посмотреть сообщение
А разница?
Не знаю. Не нашёл в инэте где по простому на пальцах объясняют зачем нужны звёздочки...
Просто с ними у меня постоянно то не работает, то ошибки...

Цитата Сообщение от nonedark2008 Посмотреть сообщение
А зачем вам такие большие числа?
Это для примера, чтобы показать что число больше 255.
На практике я не думаю что буду использовать текст длиннее 1.5 к символов.
Но лучше подстраховаться.

Цитата Сообщение от nonedark2008 Посмотреть сообщение
В unsigned __int64 влезет максимум число .
Если хочется больше, то берешь два unsigned __int64, туда уже влезет .
Я выбрал long long потому, что оно по количеству байт равное блоку.

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Твой AES вроде как должен работать с байтами, на этом завязаны все перемешивания и т.п.,
а ты зачем-то пытаешься работать сразу с блоком из 16 байт (А в памяти __int64 и есть блок из 16 байт).
Я пытаюсь просто записать большое число в первый блок(который тоже должен быть зашифрован).

Не по теме:

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Зачем писать шифрование на плюсах, если писать на плюсах не умеете?
Вы вроде бы уже давно с этой фигней сидите...
Ну так учусь. Никто не умел раньше.
Если в том плане, чтобы выбрать попроще задачу, то отвечу, уже делал, а тут сразу много всего...



Цитата Сообщение от pproger Посмотреть сообщение
ну тупыыыые
Что, не 128, а 64 бита(приставка указывает явно)?
Ну перепутал, посмотрел не там, бывает...
Не все же гениями рождаются...

Добавлено через 4 минуты
Погуглил, самое большое это unsigned long long из 8 байт ?
0
nonedark2008
931 / 670 / 147
Регистрация: 28.07.2012
Сообщений: 1,827
05.01.2016, 09:51 #7
Цитата Сообщение от артист Посмотреть сообщение
самое большое это unsigned long long из 8 байт
Есть и 128, и 256, но не у всех

Не по теме:

Цитата Сообщение от pproger Посмотреть сообщение
ну тупыыыые

1
05.01.2016, 09:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2016, 09:51
Привет! Вот еще темы с ответами:

Как вычислить большое число в экспоненте ? - C++
Всем доброго времени суток! Помогите решить проблему: в нижеприведенной формуле функция экспоненты должна возвращать очень большое...

Как называется сортировка, которая выводит самое большое число? - C++
как такая сортировка называется если есть?

Как преобразовать большое число в строку через stringstream и ограничить знаки после точки - C++
опять возникла проблема которая была недавно но с другим методом нужно преобразовать большое число типо double в строку через...

Последовательность после обработки надо записать в массив типа BYTE - C++
Дана последовательность символов типа CHAR и мне эту последовательность после обработки надо записать в массив типа BYTE. Далее массив...


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

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

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