将读取从/ dev / urandom移植到非Unix平台

时间:2017-11-10 14:27:02

标签: c random cryptography

我需要将一些软件移植到一个只有标准ANSI C运行时和一些POSIX函数的平台上。该软件通过从/dev/urandom读取来生成用于密码加密ZIP文件的随机数。在Windows上,软件使用CryptGenRandom()生成随机数。由于我的目标平台上没有这两个功能,我必须找到替代方案。

我想出了这个用buffer随机字节填充length

bool zip_random(zip_uint8_t *buffer, zip_uint16_t length)
{
   srand(time(NULL));
   while(length--) *buffer++ = rand() % 256;
   return true;
}

这可以胜任,但由于该功能在加密环境中使用,我不知道使用旧的srandrand函数是否是个好主意。这就是为什么我想问一问我的方法是否可以接受,或者是否有更好的解决方案。

1 个答案:

答案 0 :(得分:0)

rand不应用于任何需要实际安全性的内容。

关于C11 standard

的7.22.2.1中兰特的脚注
  

无法保证所产生的随机序列的质量和一些实现   已知产生具有令人沮丧的非随机低阶位的序列。应用程序   特殊要求应使用已知足以满足其需求的发电机。