c语言 - 我必须每次读取都重新打开 /dev/urandom 吗?



我有一个服务器在永久循环中运行。每隔一段时间,服务器必须执行密码的哈希处理(更具体地说,每次用户注册我的服务时)。哈希算法需要一个盐,16 个随机字节,我从/dev/urandom中读取,正如许多人推荐的那样。

所以我想:为什么不在服务器开始时只调用fopen("/dev/urandom", "rb")一次,然后根据需要调用fread

我在网络上找到的示例通常显示fread前面紧跟fopen。但这不是很贵吗?

/dev/urandom是内核熵驱动的随机数生成器的接口。 它有一个手册页,你可以在网上找到,也可能在本地找到。 通过fopen()打开它对随后可以读取的数据没有记录的影响。 没有记录在案的限制,每次打开一次读取,这样的限制也不合理。

所以我想:为什么不只给fopen("/dev/urandom", "rb")打电话一次 服务器启动,然后根据需要调用fread

你可以这样做。 主要成本是您将流程中有限数量的打开文件之一永久用于此目的,但这对您来说可能不是问题。

我在网络上找到的例子通常显示 fread 紧接在 fopen 之前。但这不是很贵吗?

打开文件相对昂贵,特别是对于已经打开它并因此什么都不做,但它是否足够昂贵取决于它完成的频率,程序可能同时或大约同时做什么,以及其他因素。 但是,我倾向于假设这些都不是您的网络示例的真正考虑因素,因为我判断它们的呈现至少部分是出于教学目的。 如果您正在编写示例,那么展示fopen()比用文字描述您使用FILE连接到/dev/urandom要容易得多,也清晰得多。

最新更新