Шифрование с использованием libsodium

Я изо всех сил пытаюсь зашифровать / расшифровать некоторые данные с помощью crypto_secretbox_easy () в libsodium. Я не могу найти никакой хорошей документации по использованию.

Я хочу получить пароль от пользователя, использовать его, чтобы как-то сделать ключ, а затем зашифровать/расшифровать данные с помощью этого.

проблема с кодом игрушки, который я опубликовал ниже, заключается в том, что crypto_secretbox_open_easy() возвращает -1 из verify_16.c. Кто-нибудь знает, где я? можно найти источник, демонстрирующий, как использовать этот интерфейс или что может быть не так? Спасибо!

 unsigned char * cipher;
 unsigned char * decoded;
 unsigned char * message;
 unsigned long long message_len = 32;
 size_t noncelen = sizeof(char) * crypto_secretbox_noncebytes();
 size_t keylen = sizeof(char) * crypto_secretbox_keybytes();
 unsigned char * nonce = calloc(noncelen, noncelen);
 unsigned char * key = calloc(keylen, keylen);

 message = calloc(32*sizeof(char), sizeof(char) * 32);
 cipher = calloc(32*sizeof(char), sizeof(char) * 32);
 decoded = calloc(32*sizeof(char), sizeof(char) * 32);

 crypto_secretbox_easy((unsigned char *)cipher, (const unsigned char *)message, 
                      message_len, nonce, key);

 crypto_secretbox_open_easy((unsigned char *)decoded, (const unsigned char *) cipher, 
                            message_len, nonce, key);

2 ответов


на test/secretbox_easy2.c file (в исходном коде натрия) показывает, как его использовать:

randombytes_buf(nonce, sizeof nonce);
crypto_secretbox_easy(c, m, mlen, nonce, k);
crypto_secretbox_open_easy(decoded, c, mlen + crypto_secretbox_MACBYTES,
                           nonce, k);

чтобы получить ключ от пароля, натрий предоставляет crypto_pwhash_scryptsalsa208sha256.


размер шифра должен быть на 16 байт больше, чем сообщение для Mac байтов, поэтому выделите еще 16 байтов и на open_easy просто добавьте + 16 к message_len.

также взгляните, ваш вызов calloc фактически выделяет много памяти, чем необходимо, потому что calloc делает умножение внутри метода.