【问题标题】:Pseudo Random number generation in C using libsodium使用 libsodium 在 C 中生成伪随机数
【发布时间】:2020-03-07 18:23:22
【问题描述】:

我正在尝试创建一个整数序列,它每次都与生成器播种时相同,但是我正在努力让它工作。现在的顺序已经不一样了。

#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]);
    }
}

【问题讨论】:

  • 不相关:更喜欢格式字符串末尾的换行符printf("(%u)\n", myInts[i]);
  • @Yunnosch Hm, seed 在任何情况下都应该完全初始化,或者你的意思是什么?
  • 是的,对不起,我没明白你的意思@Yunnosch。我也尝试过这个来初始化种子:
  • for (int i = 0; i
  • 但这也不起作用

标签: c libsodium


【解决方案1】:

问题是,这里

randombytes_buf_deterministic(myInts, 128, seed);

您生成 128 字节的伪随机数据,但您的缓冲区

unsigned int myInts[128];

sizeof(int)*128 字节大。所以你必须用

生成足够的数据
randombytes_buf_deterministic(myInts, sizeof(myInts), seed);

用确定性值填充整个缓冲区。然后它应该给出你期望的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-07
    • 2014-04-02
    • 1970-01-01
    • 2014-03-02
    • 2010-11-17
    • 2018-03-20
    • 2011-02-08
    • 1970-01-01
    相关资源
    最近更新 更多