Сначала я думал, что заполнение битов в сообщении будет означать добавление к нему нулей.
Существуют алгоритмы, которые ожидают постоянный размер блока, напр.AES или sha256.Их называют буквально «блочные алгоритмы», напр. блочные шифры .При работе с сообщениями короче, чем размер блока, вам нужно чем-то заполнить неиспользованные биты.
Обычно, по соглашению, для простоты они заполнены нулями.Существуют стандарты, в которых говорится, что вы можете дополнять неиспользуемые биты / байты.Иногда они заполнены случайными байтами или как единичные 1
, а затем нулями 0000...00
бит и т. Д. См. Пример. эта вики-страница
Клиент должен знать длину сообщения.В случае строк C, я бы просто добавил его нулевыми байтами.В любом случае строки C заканчиваются нулевым байтом, поэтому пользователь может просто strlen(received_message)
, и он будет знать длину строки.
В случае работы с произвольными данными, вы должны передать длину сообщениякаким-то образом.Может быть, каким-то другим способом или с сообщением, в начале, например.Так, например, вы можете выбрать первые 4 байта для представления длины сообщения.Или вы можете указать, что сообщение начинается со строки C с длиной сообщения, закодированной с использованием числа, представленного в базе 16, с использованием символов ASCII (так что вы можете прочитать длину сообщения с помощью %x
), и после строки ваше сообщение продолжается.
Как добавить биты в строку в C?
Просто инициализируйте память msg
нулями, либо calloc
, либо meset
:
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[]) {
char *msg = calloc(128, sizeof(*msg));
if (msg == NULL) abort();
printf("\n Enter a message");
if (scanf("%127s", msg) != 1) abort()
# bits are padded with zeros, proceed with your algorithm
return 0;
}
или вы можете запоминать только неиспользуемые байты в памяти:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
int main(int argc,char *argv[]) {
char *msg = malloc(128 * sizeof(*msg));
if (msg == NULL) abort();
printf("\n Enter a message");
if (scanf("%127s", msg) != 1) abort();
memset(&msg[strlen(msg)], 0, 128 - strlen(msg));
# bits are padded with zeros, proceed with your algorithm
return 0;
}
Примечания к вашему коду: