【发布时间】:2019-06-02 04:21:40
【问题描述】:
我有一个在永远循环中运行的服务器。每隔一段时间,服务器必须执行密码的散列(更具体地说,每次用户注册我的服务时)。散列算法需要一个盐,16 个随机字节,我从/dev/urandom 读取,这是许多人推荐的。
所以我想:为什么不在服务器启动时只调用一次fopen("/dev/urandom", "rb"),然后根据需要调用fread?
我在网上找到的示例通常显示fread 前面紧跟fopen。但这不是很贵吗?
【问题讨论】:
-
这些天我会改用getentropy(),但你可以这样做。当然,可能会遇到 stdio 缓冲问题(我不知道 glibc 是否专门处理设备文件)。如果您想从随机设备读取,
open()和read()通常会更好。 -
新打开或相同的句柄将起作用。通过保留句柄,您可以节省
fopen的开销。
标签: c linux random password-hash