I certainly can’t use the random generator for that. Currently I’m creating a CRC32 hash from unixtime()+microtime().
Are there any smarter methods than hashing time()+microtime() ?
I am not fully satisfied from the results though, I expected it to be more random, but I can see strong patterns in it, until I added more calls to MicroTime() but it gets a lot slower, so I’m looking for some optimal way of doing this.
This silly code generates the best output I could make so far, the calculations were necessary or I could see some patterns in the output:
starthash(crc32);
addtohash(crc32, MicroTime());
addtohash(crc32, time(NULL)); // 64bit
addtohash(crc32, MicroTime()/13.37f);
addtohash(crc32, (10.0f-MicroTime())*1337.0f);
addtohash(crc32, (11130.0f-MicroTime())/1313137.0f);
endhash(crc32);
MicroTime() returns microseconds elapsed from program start. I have overloaded the addtohash() to every possible type.
I would rather take non-library solutions, it’s just ~10 lines of code probably anyways, I don’t want to install huge library because of something I don’t actually need that much, and I’m more interested in the code than just using it from a function call.
If in any doubt, get your seed from
CryptGenRandomon Windows, or by reading fromdev/randomordev/urandomon *NIX systems.This might be overkill for your purposes, but unless it causes performance problems there’s no point messing with low-entropy sources like the time.
It’s unlikely to be underkill. And if you’re writing code with a real need for high-quality secure random data, and didn’t bother mentioning that in the question, well, you get what you deserve 😉