XTEA-функция с std :: vector

Я пытаюсь зашифровать std :: vector с помощью XTEA. Поскольку использование std :: vector приносит различные преимущества при работе с большими объемами данных, я хочу его использовать.

XTEA-Alogrithm использует два длинных знака без знака (v0 и v1), которые принимают 64 бита данных для их шифрования.

xtea_enc(unsigned char buf[], int length, unsigned char key[], unsigned char** outbuf)
/* Source http://pastebin.com/uEvZqmUj */

unsigned long v0 = *((unsigned long*)(buf+n));
unsigned long v1 = *((unsigned long*)(buf+n+4));

Моя проблема в том, что я ищу лучший способ преобразовать мой символ-символ в длинный беззнаковый указатель.

Или есть другой способ разделить вектор на 64-битные части для функции шифрования?

1

Решение

Понимание приходит в понимании, что каждый символ является байтом; таким образом, 64-разрядное число состоит из 8 байтов или двух 32-разрядных чисел.

Таким образом, одно 32-битное число может хранить 4 байта, поэтому для каждого 8-байтового блока в вашем символьном векторе вы должны сохранить пару 4-байтовых чисел в паре 32-битных чисел. Затем вы передадите эту пару в функцию xtea, что-то вроде:

uint32_t datablock[2];
datablock[0] = (buf[0] << 24) | (buf[1] << 16)  | (buf[2] << 8) | (buf[3]);
datablock[1] = (buf[4] << 24) | (buf[5] << 16)  | (buf[6] << 8) | (buf[7]);

где в этом примере buf — это тип char [8] (или, более подходяще, uint8_t [8]).

Сдвиг битов<<Оператор ‘меняет расположение места, где должны быть сохранены биты данного байта в uint32_t (таким образом, например, первый байт в приведенном выше примере хранится в первых 8 битах блока данных [0]). ‘|’ Оператор обеспечивает объединение всех битов, чтобы вы получили полное 32-битное число. Надеюсь, что это имеет смысл.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]