我需要将一些软件移植到一个只有标准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;
}
这可以胜任,但由于该功能在加密环境中使用,我不知道使用旧的srand
和rand
函数是否是个好主意。这就是为什么我想问一问我的方法是否可以接受,或者是否有更好的解决方案。
答案 0 :(得分:0)
rand
不应用于任何需要实际安全性的内容。
无法保证所产生的随机序列的质量和一些实现 已知产生具有令人沮丧的非随机低阶位的序列。应用程序 特殊要求应使用已知足以满足其需求的发电机。