Шифрование с использованием 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 делает умножение внутри метода.