штукой, но не могу никак исправить.
(TweetNaCl: https://github.com/dominictarr/tweetnacl/blob/master/tweetnacl.c)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "tweetnacl.h"
char* randbytes(size_t num_bytes)
{
char* stream = malloc(num_bytes);
for (size_t i = 0; i < num_bytes; i++)
{
stream[i] = rand();
}
return stream;
}
int main()
{
const unsigned char* message_ = "hello" + '\0';
int mlen = sizeof(message_);
const unsigned char message[crypto_secretbox_ZEROBYTES + mlen];
unsigned char key[crypto_secretbox_KEYBYTES];
unsigned char nonce[crypto_secretbox_NONCEBYTES];
unsigned char ciphertext[crypto_secretbox_ZEROBYTES + mlen];
strncpy(message+32, message_, mlen);
strncpy(key, randbytes(crypto_secretbox_KEYBYTES), crypto_secretbox_KEYBYTES);
strncpy(nonce, randbytes(crypto_secretbox_NONCEBYTES), crypto_secretbox_NONCEBYTES);
int b1 = crypto_secretbox(ciphertext, message, crypto_secretbox_ZEROBYTES + mlen, nonce, key);
unsigned char decrypted[mlen];
int b2 = crypto_secretbox_open(decrypted, ciphertext, crypto_secretbox_ZEROBYTES + mlen, nonce, key);
printf("b1 %d\n", b1);
printf("b2 %d\n", b2);
printf("%s\n", decrypted);
return 0;
}
const unsigned char message и далее внутрь этой области что-то копируется, хотя это const
const unsigned char* message_ = "hello" + '\0'; ноль можно не добавлять он и так будет в "hello" литерале и строки нельзя так конкатенировать
и mlen = sizeof(message_) не вернет размер массива, он вернет размер указателя
Не копируется
У тебя разложение массива до указателя и прибавление к последнему интового значения 48, т.е. hello ты просто пропустил. Ну и конечно, это уб. Ну а сконкатенировать строковые литералы можно и без +, "hello" " world", но в данном случае этого не требуется.
strncpy(message+32, message_, mlen); Здесь?
Первая строчка в мейне
const unsigned char* message_ = "hello";
int mlen = strlen(message_); Все равно выдает пустоту
Да не может такого быть)
print("%d", mlen);
Кстати, а почему uchar то? А не просто чар?
Хз, где-то так было
Так и где пустота то?
Я про printf("%s\n", decrypted);
strlen не включает ноль в размер
Это отлично, ты предлагаешь всем участникам склонить либу с гитхаба, скомпилить и отдебажить?
Найди место, где поведение отличается от ожидаемого, потом пиши.
Напиши вместо sizeof(message_) это strlen(message_) + 1
Обсуждают сегодня