33 lines
755 B
Text
33 lines
755 B
Text
|
#!/usr/bin/env zsh
|
||
|
#
|
||
|
# Usage: genpass-monkey [NUM]
|
||
|
#
|
||
|
# Generate a password made of 26 alphanumeric characters
|
||
|
# with the security margin of at least 128 bits.
|
||
|
#
|
||
|
# Example password: nz5ej2kypkvcw0rn5cvhs6qxtm
|
||
|
#
|
||
|
# If given a numerical argument, generate that many passwords.
|
||
|
|
||
|
emulate -L zsh -o no_unset -o warn_create_global -o warn_nested_var
|
||
|
|
||
|
if [[ ARGC -gt 1 || ${1-1} != ${~:-<1-$((16#7FFFFFFF))>} ]]; then
|
||
|
print -ru2 -- "usage: $0 [NUM]"
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
zmodload zsh/system || return
|
||
|
|
||
|
{
|
||
|
local -r chars=abcdefghjkmnpqrstvwxyz0123456789
|
||
|
local c
|
||
|
repeat ${1-1}; do
|
||
|
repeat 26; do
|
||
|
sysread -s1 c || return
|
||
|
# There is uniform because $#chars divides 256.
|
||
|
print -rn -- $chars[#c%$#chars+1]
|
||
|
done
|
||
|
print
|
||
|
done
|
||
|
} </dev/urandom
|