RSA. Деление на блоки
Пытаюсь реализовать алгоритм RSA и возникла проблема при восстановлении значений зашифрованных блоков.
Например, сообщение "Hello!".
Переводим его в ASCII-код: [72, 101, 108, 108, 111, 33]
Группируем блоки по 2 байта: [72101, 108108, 11133]
При расшифровании зашифрованного файла я получаю значения блоков из п.2, но непонятно каким образом, блок представленный в виде целого числа "72101" восстановить в два отдельных ASCII-символа "72" и "101".
// Разбиение файла на блоки
for (uint64 currentBlock = 0; currentBlock < (fileSize / blockSize); currentBlock++)
{
// Текущий блок
unsigned char *block;
block = malloc(blockSize * sizeof(unsigned char));
// Считывание данных размером blockSize байт
fread(block, sizeof(unsigned char), blockSize, sourceFile);
// Конвертация текущего блока в целое беззнаковое
uint64 m = blockToNum(block, blockSize);
// Получение зашифрованного блока
uint64 c = powModule(m, d, N);
// Запись зашифрованного блока в передаваемый файл
fprintf(cipherFile, "%llu ", c);
printf("block[%lld]: %s -> m: %llu -> c: %llu\n", currentBlock, block, m, c);
free(block);
}
Решением проблемы может быть использованием размера блока в 1 байт, но хотелось бы знать, что делать с блоками размером более 1 байта.
Источник: Stack Overflow на русском