RSA. Деление на блоки

Рейтинг: 0Ответов: 0Опубликовано: 18.05.2023

Пытаюсь реализовать алгоритм RSA и возникла проблема при восстановлении значений зашифрованных блоков.

Например, сообщение "Hello!".

  1. Переводим его в ASCII-код: [72, 101, 108, 108, 111, 33]

  2. Группируем блоки по 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 байта.

Ответы

Ответов пока нет.