Quantcast
Channel: CodeSection,代码区,Linux操作系统:Ubuntu_Centos_Debian - CodeSec
Viewing all articles
Browse latest Browse all 11063

Passphrase generation using awk

$
0
0

Given a requirement of generating a temporary passphrase that can be communicated over the phone to another person, I thought of XKCD #936 which suggests using four random words together as a passphrase. Then there’s just the question of how to generate that easily.

On each system there’s a file containing a list of words somewhere, on OS X it’s located at /usr/share/dict/words . This contains a good ~236,000 words on my machine so that seems like a good enough corpus to pull our four words from. We could take the easy route and lean on gnu sort to sort the file randomly & then take the top four words using head :

$ gsort -R /usr/share/dict/words | head -n4 | xargs fountained irretraceable unoil barylalia

This works, but isn’t that performant (takes nearly 5 seconds on my machine.) There should be a more performant way to do this, we’re just reading a file in as a list & picking four random elements from said list. How about we lean on awk instead:

$ awk ' BEGIN { srand() } { words[NR] = $0 } END { for (i = 1; i <= 4; i++) { f = "%s " if (i == 4) { f = "%s" } printf f, words[int(rand() * NR)] } }' /usr/share/dict/words swording memorability sneakingness readily

This runs in around 350ms on the same machine, which is a nice speedup and quick enough it feels near-instant.

Next time you need to generate a random passphrase, remember our old friend awk !


Viewing all articles
Browse latest Browse all 11063

Trending Articles