如何在C中使用ISAAC

我从这里下载了isaac64,我的使用有些问题。 我不得不在isaac64.c中评论部分代码,因为它包含main函数。 但我无法使用它…我无法正确初始化它并得到随机数,你能帮助我吗? 我找不到任何例子。

  randinit(TRUE); 
    对于(I = 0; I <10;我++){
    的printf( “%LX \ n” 个,兰特());
     } 

每次运行此代码时,我都会得到相同的值。 我不知道怎么设种子。

此版本的ISAAC是一个“参考实现”,意味着它可以被引用,但不是特别用户友好或准备生产。 C语言中有许多加密安全随机数生成器 ,更易于使用。 特别是,在大多数操作系统上,简单地从/ dev / random读取字节就足够了。


mainfunction演示了如何使用库。 它已经被#ifdef s注释掉了。 我发现在ISAAC周围使用Perl包装器作为指导也有帮助。

 int main() { /* Initialize the structure to 0 */ randctx ctx; ctx.randa = ctx.randb = ctx.randc = (ub4)0; /* Initialize the seed */ for (ub4 i=0; i<256; ++i) { ctx.randrsl[i] = i; } /* Initialize the random numbers from the seed */ randinit(&ctx, TRUE); /* Print 10 pseudo random numbers */ for(int i=0; i<10; i++) { printf("%.8lx\n", rand(&ctx)); } } 

你必须提供seed ,或“熵” 。 如果您提供相同的种子,您将获得相同的结果。 这就是为什么ISAAC是一个随机数生成器,它只能从现有的随机性中产生更多随机看似的数字。 讨论了从Math :: Random :: ISAAC中获取种子的位置 。

如果这些是您的新概念,如果这是生产代码,我强烈建议您只需从/dev/random读取 。 这种ISAAC实现非常粗糙,加密很容易出错。 /dev/random已经为您处理了所有这些。

如果必须使用自己的伪随机库,请使用OpenSSL等经过良好实施和记录的库。

如果您要完成此操作,我建议您调整Perl包装器中的代码版本,因为至少作者已将其清理为有价值的版本。