11.14. Getting a Random Printable ASCII String
Problem
You want to get a random printable ASCII string.
Solution
If you do not want whitespace characters, the printable ASCII characters have values from 33 to 126, inclusive. Simply get a random number in that range for each character.
If you want to choose from a different character set (such as the base64 character set), map each character to a specific numeric value between 0 and the number of characters you have. Select a random number in that range, and map the number back to the corresponding character.
Discussion
The code presented in this section returns a random ASCII string of a
specified length, where the specified length includes a terminating
NULL byte. We use the printable ASCII characters,
meaning that we never output whitespace or control characters.
Assuming a good underlying infrastructure for randomness, each character should be equally likely. However, the ease with which an attacker can guess a single random string is related not only to the entropy in the generator, but also to the length of the output. If you use a single character, there are only 94 possible values, and a guess will be right with a probability of 1/94 (not having entropy can give the attacker an even greater advantage).
As a result, your random strings
should use no fewer than 10 random characters (not including the
terminating NULL byte), which gives you about 54 bits of security. For a more conservative security margin, you should go for 15 to ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access