Генерация псевдослучайных чисел в C с использованием libsodium - PullRequest
3 голосов
/ 07 марта 2020

Я пытаюсь создать последовательность целых чисел, которая будет одинаковой каждый раз при посеве генератора, однако я изо всех сил пытаюсь заставить его работать. Сейчас последовательность никогда не бывает одинаковой.

#include "sodium.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main()
{
    if (sodium_init() == -1)
    {
        return 1;
    }

    unsigned int myInts[128];
    char seed[randombytes_SEEDBYTES] = "a seeeeeed";
    printf("%s", seed);

    randombytes_buf_deterministic(myInts, 128, seed);

    for (int i = 0; i < 128; i++)
    {
        printf("\n(%u)", myInts[i]);
    }
}

1 Ответ

3 голосов
/ 07 марта 2020

Проблема в том, что здесь

randombytes_buf_deterministic(myInts, 128, seed);

вы генерируете 128 байтов псевдослучайных данных, но ваш буфер

unsigned int myInts[128];

имеет размер sizeof(int)*128 байтов. Таким образом, вы должны сгенерировать достаточно данных с

randombytes_buf_deterministic(myInts, sizeof(myInts), seed);

, чтобы заполнить весь буфер определенными значениями c. Тогда он должен дать ожидаемый результат.

...