使用Mac里的openssl生成密码
现在各种密码保存的软件,自己的密码都可以不用记着了,那么我们为了密码更加安全就完全可以使用随机生成的密码了,连我们自己的想不到的密码就比全部用自己的常用密码要安全许多。这个密码生成脚本是使用openssl的命令来生成,在Mac系统里是自带这个软件的。
使用openssl生成密码
#!/bin/zsh
if [ ! $1 ]
then
len=9
elif [ "-h" = $1 ]
then
echo "Usage: genpd Generate a 10-digit password."
echo "Usage: genpd [number] Generate a number-digit password."
exit 1
elif [ "$1" -gt 0 ] 2>/dev/null
then
len=$1
else
echo "illegal option -- $1 must number or [-h]"
exit 2
fi
openssl rand -base64 $len
脚本写完后给它可执行权限,然后将其放到环境变量里,或者在文件的当前目录执行该脚本。
默认不加任何参数的话,随机种子使用的是9个,一般3的倍数不会输出最后的=
,建议使用3的倍数。
使用自定义随机函数生成密码
如果不想使用openssl生成的密码,还可以使用下面我自己写的一个函数来生成密码。原理是使用系统随机函数从大小写字母、数字、常见符号中拿到一串随机的字符串作为密码。
#!/bin/zsh
function generator(){
passwd=""
base_str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.;><?[]{}~!@#$%^&*()-=+1234567890"
for i in `seq 1 $1`;do
pos=$RANDOM%${#base_str}
char=${base_str:${pos}:1}
passwd=$passwd$char
done;
echo $passwd
}
if [ ! $1 ]
then
len=18
elif [ "-h" = $1 ]
then
echo "Usage: genpd Generate a 10-digit password."
echo "Usage: genpd [number] Generate a number-digit password."
exit 1
elif [ "$1" -gt 0 ] 2>/dev/null
then
len=$1
else
echo "illegal option -- $1 must number or [-h]"
exit 2
fi
generator $len
使用系统字符生成安全密码
将上面两种的方式也加入到选项中,可通过指定参数选择生成方式。
#!/bin/zsh
function generator(){
passwd=""
base_str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.;><?[]{}~!@#$%^&*()-=+1234567890"
for i in `seq 1 $1`;do
pos=$RANDOM%${#base_str}
char=${base_str:${pos}:1}
passwd=$passwd$char
done;
echo $passwd | pbcopy
pbpaste
}
len=18
while getopts "l:osgh" args;
do
case $args in
l)
len=$OPTARG
;;
s)
# generate a secure password and copy to clipboard
LC_ALL=C tr -dc "[:alnum:]" < /dev/urandom | head -c $len | pbcopy
pbpaste
echo "\npassword has copyed to clipboard."
break
;;
o)
openssl rand -base64 $len | pbcopy
pbpaste
echo "password has copyed to clipboard."
break
;;
h)
echo "Usage: genpd [-s|-o|-g] Generate a 18-digit password."
echo "Usage: genpd -l [number] [-s|-o|-g] Generate a number-digit password."
echo "[-s]: Generate a safe password."
echo "[-o]: Generate a password containing characters."
echo "[-g]: Generate a password containing all common characters."
break
;;
g)
generator $len
echo "password has copyed to clipboard."
;;
?)
echo "illegal option -- $args you can use genpd -h."
exit 1
;;
esac
done
如果你还有什么好的方案也可以在评论区中留言。