98 / 33 / 21
Регистрация: 17.09.2014
Сообщений: 1,497
1

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

04.01.2016, 23:53. Показов 3353. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2016, 23:53
Ответы с готовыми решениями:

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

Как записать большое число в виде строки a*b^n+c
Как записать большое целое число в виде строки a*b^n +c где a, b, n, c = int или long long....

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

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

6
1391 / 1020 / 324
Регистрация: 28.07.2012
Сообщений: 2,809
05.01.2016, 01:07 2
Лучший ответ Сообщение было отмечено артист как решение

Решение

Цитата Сообщение от артист Посмотреть сообщение
Прокатит так?
Прокатит.
Но тут стоило догадаться, что размер __int64 равен 16 байтам.
И можно просто скастовать указатель на __int64 к указателю на byte.
Типа так:
C++
1
2
__int64 a = 1;
byte *pA = (byte *)&a;
Или через объединения...
Или подумать и прийти к выводу, что для AES не нужен никакой __int64, а достаточно просто byte.
1
98 / 33 / 21
Регистрация: 17.09.2014
Сообщений: 1,497
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
1391 / 1020 / 324
Регистрация: 28.07.2012
Сообщений: 2,809
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 влезет максимум число https://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{64}-1.
Если хочется больше, то берешь два unsigned __int64, туда уже влезет https://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{128}-1.
Твой AES вроде как должен работать с байтами, на этом завязаны все перемешивания и т.п.,
а ты зачем-то пытаешься работать сразу с блоком из 16 байт (А в памяти __int64 и есть блок из 16 байт).

Не по теме:


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

1
166 / 69 / 17
Регистрация: 22.03.2011
Сообщений: 196
05.01.2016, 04:32 5
Цитата Сообщение от артист Посмотреть сообщение
Это вроде __int64 как раз 128 бит
ну тупыыыые
2
98 / 33 / 21
Регистрация: 17.09.2014
Сообщений: 1,497
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
1391 / 1020 / 324
Регистрация: 28.07.2012
Сообщений: 2,809
05.01.2016, 09:51 7
Цитата Сообщение от артист Посмотреть сообщение
самое большое это unsigned long long из 8 байт
Есть и 128, и 256, но не у всех

Не по теме:

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

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2016, 09:51
Помогаю со студенческими работами здесь

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

Как вывести большое число на экран
Как вывести 30 значное число на экран, есть пример 987654321987654*123456789123456=в итоге...

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru