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

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

Восстановить пароль Регистрация
 
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 570
Завершенные тесты: 1
04.01.2016, 23:53     Как записать в byte большое число? #1
В общем первый блок в 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);
Т.е. получится раскидать число по байтам.

Прокатит так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
05.01.2016, 01:07     Как записать в byte большое число? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от артист Посмотреть сообщение
Прокатит так?
Прокатит.
Но тут стоило догадаться, что размер __int64 равен 16 байтам.
И можно просто скастовать указатель на __int64 к указателю на byte.
Типа так:
C++
1
2
__int64 a = 1;
byte *pA = (byte *)&a;
Или через объединения...
Или подумать и прийти к выводу, что для AES не нужен никакой __int64, а достаточно просто byte.
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 570
Завершенные тесты: 1
05.01.2016, 01:23  [ТС]     Как записать в byte большое число? #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
}
Как тут записывается длина вообще не понимаю.
Но думаю так же...
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
05.01.2016, 03:18     Как записать в byte большое число? #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 байт).

Не по теме:


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

pproger
162 / 65 / 13
Регистрация: 22.03.2011
Сообщений: 188
05.01.2016, 04:32     Как записать в byte большое число? #5
Цитата Сообщение от артист Посмотреть сообщение
Это вроде __int64 как раз 128 бит
ну тупыыыые
артист
 Аватар для артист
0 / 2 / 3
Регистрация: 17.09.2014
Сообщений: 570
Завершенные тесты: 1
05.01.2016, 06:26  [ТС]     Как записать в byte большое число? #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 байт ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2016, 09:51     Как записать в byte большое число?
Еще ссылки по теме:

C++ Как записать большое число в виде строки a*b^n+c
C++ Большое число
C++ Как правильно записать большое число

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

Или воспользуйтесь поиском по форуму:
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
05.01.2016, 09:51     Как записать в byte большое число? #7
Цитата Сообщение от артист Посмотреть сообщение
самое большое это unsigned long long из 8 байт
Есть и 128, и 256, но не у всех

Не по теме:

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

Yandex
Объявления
05.01.2016, 09:51     Как записать в byte большое число?
Ответ Создать тему
Опции темы

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